02.数据导入&清理1.导入csv文件2.导入文本文件3.导入EXCEL文件:4.解决中文路径异常问题5.导出csv文件6.重复值处理7.缺失值处理8.空格值处理

1.导入csv文件

read_csv(file, encoding)
#如导入中文:encoding='utf-8'
from pandas import read_csv
df = read_csv(
    '/users/bakufu/desktop/4.1/1.csv',
    encoding='utf-8'
)

df
Out[173]: 
   age  name
0   23   KEN
1   32  John
2   25  JIMI

2.导入文本文件

read_table(file, names=[列名1, 列名2, ...], sep="", encoding)
#如导入中文:encoding='utf-8'

参数

注释

file

文件路径

names

列名,默认为文件第一行

sep

分隔符,默认为空,表示默认导入为一列

encoding

设置文件编码

from pandas import read_table
df = read_table(
    '/users/bakufu/desktop/4.1/2.txt',
    names=['age', 'name'],
    sep=',',
    encoding='utf-8'        
)

df
Out[175]: 
  age  name
0  23   KEN
1  32  John
2  25  JIMI
3  中文    英文

3.导入EXCEL文件:

read_excel(fileName, sheetname, names)
#如导入中文:encoding='utf-8'

用pandas读取Excel文件时, 如提示:ModuleNotFoundError: No module named 'xlrd', 因为Excel需要单独安装xlrd模块进行支持。

conda list xlrd

参数

注释

fileName

文件路径

sheetname

表名

names

列名,默认为文件中的第一行

from pandas import read_excel
df = read_excel(
    '/users/bakufu/desktop/4.1/3.xlsx',
    sheetname = 'data',
    encoding='utf-8'
)

df
Out[177]: 
   age  name
0   23   KEN
1   32  John
2   25  JIMI

4.解决中文路径异常问题

df = read_excel(
    ...
    encoding='utf-8',
    engine='python'    
)

5.导出csv文件

to_csv(filePath, sep=",", index = TRUE, header = TRUE)

参数

注释

filePath

导出的文件路径

sep

分隔符,默认为逗号

index

是否导出行序号,默认为TRUE

header

是否导出列名,默认为TRUE

from pandas import DataFrame
df = DataFrame({
    'age': [21, 22, 23],
    'name': ['Aa', 'Bb', 'Cc'],
    'sex': ['F', 'F', 'M']        
})

df.to_csv(
    "/users/bakufu/desktop/4.1/df.csv",
    index = False        
)

6.重复值处理

drop_duplicates()

把数据结构中,行相同的数据只保留一行

from pandas import read_csv
df = read_csv('/users/bakufu/desktop/4.3/data.csv')
Out[2]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重         0.61kg
3  1251147  商品产地             中国
4  1251147    品牌          Apple
5  1251147  商品名称  苹果iPad mini 3
6  1251147    硬盘           128G
7  1251147    尺寸      7.8英寸-9英寸

#找出行重复的位置
dIndex = df.duplicated(['id', 'key', 'value'])
dIndex
Out[4]: 
0    False
1    False
2    False
3    False
4     True
5     True
6    False
7    False
dtype: bool

#根据返回值,将重复值提取出来
df[dIndex]
Out[5]: 
        id   key          value
4  1251147    品牌          Apple
5  1251147  商品名称  苹果iPad mini 3

#根据所有列在原数据直接删除重复值
df = df.drop_duplicates()
Out[7]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重         0.61kg
3  1251147  商品产地             中国
6  1251147    硬盘           128G
7  1251147    尺寸      7.8英寸-9英寸

#保持原数据不变,将去重的数据赋值给新的变量
newDF = df.drop_duplicates()
Out[9]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重         0.61kg
3  1251147  商品产地             中国
6  1251147    硬盘           128G
7  1251147    尺寸      7.8英寸-9英寸

#可以指定某n列,删除重复值
df
Out[14]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重         0.61kg
3  1251147  商品产地             中国
4  1251147    品牌          Apple
5  1251147  商品名称  苹果iPad mini 3
6  1251147    硬盘           128G
7  1251147    尺寸      7.8英寸-9英寸

newDF = df.drop_duplicates(['id', 'key', 'value'])
Out[16]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重         0.61kg
3  1251147  商品产地             中国
6  1251147    硬盘           128G
7  1251147    尺寸      7.8英寸-9英寸

7.缺失值处理

  • 数据补齐
  • 删除对应缺失行
  • 不处理
from pandas import read_csv
df = read_csv(
        '/users/bakufu/desktop/4.4/data.csv'
)
Out[21]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重            NaN
3  1251147   NaN             中国
4  1251147    硬盘           128G
5  1251147    尺寸      7.8英寸-9英寸

#找出空值的位置
isNA = df.isnull()
Out[23]: 
      id    key  value
0  False  False  False
1  False  False  False
2  False  False   True
3  False   True  False
4  False  False  False
5  False  False  False

#获取出空值所在的行
df[isNA.any(axis=1)]
Out[25]: 
        id   key value
2  1251147  商品毛重   NaN
3  1251147   NaN    中国

df[isNA[['key']].any(axis=1)]
Out[26]: 
        id  key value
3  1251147  NaN    中国

df[isNA[['key', 'value']].any(axis=1)]
Out[27]: 
        id   key value
2  1251147  商品毛重   NaN
3  1251147   NaN    中国

#将NaN值换成指定值
df.fillna('未知')
Out[28]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
2  1251147  商品毛重             未知
3  1251147    未知             中国
4  1251147    硬盘           128G
5  1251147    尺寸      7.8英寸-9英寸

#直接删除空值,并赋值给新变量
newDF = df.dropna()
Out[31]: 
        id   key          value
0  1251147    品牌          Apple
1  1251147  商品名称  苹果iPad mini 3
4  1251147    硬盘           128G
5  1251147    尺寸      7.8英寸-9英寸

8.空格值处理

from pandas import read_csv
df = read_csv(
    '/users/bakufu/desktop/4.5/data.csv'
)
Out[33]: 
   id        name
0   1         KEN
1   2      JIMI  
2   3        John

#清除字符串两边空格
newName = df['name'].str.strip()
Out[42]: 
0     KEN
1    JIMI
2    John
Name: name, dtype: object

#清除字符串左边空格
newName = df['name'].str.lstrip()
Out[35]: 
0       KEN
1    JIMI  
2      John
Name: name, dtype: object

#清除字符串右边空格
newName = df['name'].str.rstrip()
Out[40]: 
0         KEN
1        JIMI
2        John
Name: name, dtype: object

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

Codeforces 839A Arya and Bran【暴力】

A. Arya and Bran time limit per test:1 second memory limit per test:256 megabyte...

3116
来自专栏MasiMaro 的技术博文

windows错误处理

在调用windows API时函数会首先对我们传入的参数进行校验,然后执行,如果出现什么情况导致函数执行出错,有的函数可以通过返回值来判断函数是否出错,比如对于...

1382
来自专栏Albert陈凯

Hadoop数据分析平台实战——260用户数据ETL离线数据分析平台实战——260用户数据ETL

离线数据分析平台实战——260用户数据ETL ETL目标 解析我们收集的日志数据,将解析后的数据保存到hbase中。 这里选择hbase来存储数据的主要原因就...

5226
来自专栏mwangblog

python类(二)

1332
来自专栏林德熙的博客

C# 对 byte 数组进行模式搜索

最简单的方法是进行数值判断,但是代码最少是使用Linq ,效率比较高是使用 Boyer-Moore 算法,下面就告诉大家几个算法的代码

3041
来自专栏函数式编程语言及工具

Akka(25): Stream:对接外部系统-Integration

   在现实应用中akka-stream往往需要集成其它的外部系统形成完整的应用。这些外部系统可能是akka系列系统或者其它类型的系统。所以,akka-stre...

4378
来自专栏积累沉淀

初识HtmlParser

1、概念 网页解析,即程序自动分析网页内容、获取信息,从而进一步处理信息。 htmlparser包提供方便、简洁的处理html文件的方法,它将html页面中...

2235
来自专栏小樱的经验随笔

BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1469  Solved: 63...

2714
来自专栏风口上的猪的文章

.NET面试题系列[13] - LINQ to Object

"C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard

1202
来自专栏程序员互动联盟

【答疑释惑】ascii码及转义字符的含义

我们在c/c++学习开发中经常用到它,小伙伴们你们都知道那些,是不是用到的时候着急或者不知道,为什么判断字符串结尾是'\0'呢?   我们就讲讲列列ascii...

3505

扫码关注云+社区

领取腾讯云代金券