pandas数据格式:
- Series:一维
- DataFrame:二维,每一列为一个Series
DataFrame列定位的不同方式:
-
依据属性名选择:
data['column']
和data.column
都返回series类型(因为只有一列有意义的值),其中第一列为series的自动编号,第二列为所定位列的数据; -
依据下标选择:
data.iloc[:,0]
返回series类型,定位第0列 -
选取多列:
df[["a","b"]]
,即使用一个列表将需要选取的列名放进去
对DataFrame某一列进行处理:
- 对该列进行取值:
df.column.values
:会返回一个array类型的值,该数组保存该列的所有值,用逗号分隔;因为数组是一个容器,所以可以迭代。 - 获取该列的统计指标:
df['column'].describle()
- 数据类型转换:
df['column'] = df['column'].astype(np.datetime64)
- 对column列使用函数transfer进行处理并放回(更改保存):
df['column'] = df['column'].map(lambda x: transfer(x))
- 基于某一列的数值进行数据筛选(加&和|可以实现多条件筛选):
df = df[df['column']==1]
,筛选是除了普通的>、<、= 还可使用isin。 - 根据一个dataframe的某一列值对另一个dataframe进行筛选–先将data1作为过滤参考的一列值取出,用list保存,然后用isin方法基于此list进行筛选:
df2 = df2[df2["column2"].isin(list(df1["column1"]))]
。isin方法返回的是True/False的布尔值,当为True时该列中的该值保存。
DataFrame行定位的不同方式:
- List item
DataFrame行列定位的应用:
DataFrame内建函数:
len(df)
:返回df的行数(比df.shape[0]快)
DataFrame可调用的方法:
df.shape[0/1]
:返回df的行数/列数- 丢弃:
df.drop(['column',axis = 1] )
:丢弃column列 - 清理无效数据:
df.dropna()
:将所有含NaN的行删除;df.dropna(axis=1,thresh=3)
:将在列的方向上三个为NaN的项删除;df.dropna(how='ALL')
:将全部项都是NaN的行删除;drop_duplicates
- 缺失值填充:
df.fillna(0/str)
使用0或者str来替换df中的缺失值 - 替换:
df.replace("a",1,inplace=True)
将df中的a都替换成1,inplace为True时会替换原来的dataframe;df.replace(dic)
即用字典进行替换,字典的key值为dataframe里面的字符,values为将要用来替换的字符。
Series数据基本处理:
因为series是一维的,故不存在行列,统一为series的索引方法
Series类的str自带方法:
当Series的类型是str时,可以用一些str的自带方法对其进行处理,参考链接。
- cat()拼接字符串
>>> Series(['a', 'b', 'c']).str.cat(['A', 'B', 'C'], sep=',')
0 a,A
1 b,B
2 c,C
dtype: object
>>> Series(['a', 'b', 'c']).str.cat(sep=',')
'a,b,c'
>>> Series(['a', 'b']).str.cat([['x', 'y'], ['1', '2']], sep=',')
0 a,x,1
1 b,y,2
dtype: object
- split()切分字符串
>>> import numpy,pandas;
>>> s = pandas.Series(['a_b_c', 'c_d_e', numpy.nan, 'f_g_h'])
>>> s.str.split('_')
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', -1)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', 0)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', 1)
0 [a, b_c]
1 [c, d_e]
2 NaN
3 [f, g_h]
dtype: object
>>> s.str.split('_', 2)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
- get() 获取指定位置的字符串:s.str.get(0)即代表获取每一行的第0个字符串
- join(“str”) 对每一行的每个字符都用定的字符串拼接起来。
- contains(“str”) 每一行的字符串是否包含str,包含则返回True,否则返回False
- replace() 替换:s.str.replace(",","-"):将每一行的,都换成 - 。
- repeat() 重复:repeat(3)即将每一行已有的字符串重复三遍。
- pad() 左右补齐:
>>> s.str.pad(10, fillchar="?")
0 ?????a_b_c
1 ?????c_d_e
2 NaN
3 ?????f_g_h
dtype: object
>>>
>>> s.str.pad(10, side="right", fillchar="?")
0 a_b_c?????
1 c_d_e?????
2 NaN
3 f_g_h?????
dtype: object
- center() 中间补齐:
>>> s.str.center(10, fillchar="?")
0 ??a_b_c???
1 ??c_d_e???
2 NaN
3 ??f_g_h???
dtype: object
- ljust() 右边补齐,rjust() 左边补齐,用法同上
- zfill() 左边补0:s.str.zfill(10)
- slice() 按给定的开始结束位置切割字符串,不包括结束位置
- count() 计算给定单词出现的次数
- startswith() 判断是否以给定的字符串开头,endswith() 判断是否以给定的字符串结束:如s.str.startswith(“a”)
- findall() 查找所有符合正则表达式的字符,以数组形式返回
索引器loc,iloc,ix的区别
- loc 在index的标签上进行索引,范围包括start和end,即其切片为显式索引(显示索引还包括取值,如df[1])。
- iloc 在index的位置上进行索引,不包括end,其切片为隐式索引。
- ix先在index的标签上索引,索引不到就在index的位置上索引(如果index非全整数),不包括end.