Python-pandas
参考文献
pandas
Series
- Series 是个定长的字典序列.说是定长是因为在存储的时候,相当于两个 ndarray,这也是和字典结构最大的不同.因为在字典的结构里,元素的个数是不固定的.
- Series有两个基本属性:index 和 values.在 Series 结构中,index 默认是 0,1,2,……递增的整数序列,当然也可以自己来指定索引,比如 index=[‘a’, ‘b’, ‘c’, ‘d’].
1 | import pandas as pd |
DataFrame
DataFrame
类型数据结构类似数据库表.- 它包括了行索引和列索引,可以将
DataFrame
看成是由相同索引的 Series 组成的字典类型.
1 | import pandas as pd |
数据导入和输出
1 | import pandas as pd |
数据清洗
删除 DataFrame 中的不必要的列或行
-
Pandas 提供了一个便捷的方法 drop() 函数来删除不想要的列或行
1
2
3df2 = df2.drop(columns=['Chinese'])
df2 = df2.drop(index=['ZhangFei'])
重命名列名 columns,让列表名更容易识别
-
如果想对
DataFrame
中的columns
进行重命名,可以直接使用rename(columns=new_names, inplace=True)
函数1
df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
去重复的值
1 | df = df.drop_duplicates() # 去除重复行 |
更改数据格式
-
可以使用
astype
函数来规范数据格式,比如把Chinese 字段的值改成str
类型,或者int64
1
2df2['Chinese'].astype('str')
df2['Chinese'].astype(np.int64)
删除数据间的空格
-
使用
strip
函数1
2
3
4
5
6# 删除左右两边空格
df2['Chinese']=df2['Chinese'].map(str.strip)
# 删除左边空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
# 删除右边空格
df2['Chinese']=df2['Chinese'].map(str.rstrip) -
如果数据里有某个特殊的符号,同样可以使用
strip
函数,比如 Chinese 字段里有美元符号,想把这个删掉,可以这么写:1
df2['Chinese']=df2['Chinese'].str.strip('$')
大小写转换
-
在 Python 里直接使用
upper(), lower(), title()
函数1
2
3
4
5
6
7
# 全部大写
df2.columns = df2.columns.str.upper()
# 全部小写
df2.columns = df2.columns.str.lower()
# 首字母大写
df2.columns = df2.columns.str.title()
查找空值
- 数据量大的情况下,有些字段存在空值
NaN
的可能,这时就需要使用 Pandas 中的isnull
函数进行查找 - 如果想看下哪个地方存在空值
NaN
,可以针对数据表df
进行df.isnull()
1 | import pandas as pd |
数据清洗
-
使用
apply
函数对数据进行清洗1
2
3
4
5
6
7
8
9
10
11
12
13
14# 对 name 列的数值都进行大写转化
df['name'] = df['name'].apply(str.upper)
def double_df(x):
return 2*x
df1[u'语文'] = df1[u'语文'].apply(double_df)
def plus(df,n,m):
df['new1'] = (df[u'语文']+df[u'英语']) * m
df['new2'] = (df[u'语文']+df[u'英语']) * n
return df
df1 = df1.apply(plus,axis=1,args=(2,3,))
数据统计
1 | import pandas as pd |
数据表合并
1 | import pandas as pd |
pandasql
-
pandasql
中的主要函数是sqldf
,它接收两个参数:一个 SQL 查询语句,还有一组环境变量globals()
或locals()
1
2
3
4
5
6
7
8
9
10
11import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
pysqldf = lambda sql: sqldf(sql, globals())
sql = "select * from df1 where name ='ZhangFei'"
print pysqldf(sql)
# output
name data1
0 ZhangFei 0
读取CSV
跳过一些行数但保留表头
1 | pd.read_csv('test.csv', skiprows=range(1, 10)) |
处理日期列
1 | df = pd.read_csv(csv_file, usecols=['id', 'datetime'], header=0, |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!