Python模块之Pandas
以下内容摘自莫烦Python;
如果说Numpy是以矩形形式存储数据的,则Pandas则是以字典形式存储数据的;
Pandas的两个主要数据结构:Series和DataFrame;
Series:索引在左边,值在右边,如果没有为数据指定索引,则会自动创建一个0~N-1(N为长度)的整数型索引
DataFrame:是一个表格型的数据结构,它包含有一组有序的列,每列可以是不同的值类型(比如数值、字符串等),既有行索引也有列索引
挑选 b 的元素:
如果没有给定索引值,也是默认从0~N-1排序;
下面是一种生成dataframe的方法:
查看数据中的类型:
print(df2.dtypes)
看对列的序号:
print(df2.index) # 就是左边的索引
看行的索引名称:
print(df2.columns)
只看df2的值,不看索引:
print(df2.value)
数据总结:
df2.describe()
翻转数据:
print(df2.T)
对数据的index进行排序输出:
print(df2.sort_index(axis = 1, ascending = False)) # 对行索引排序
对数据的值进行排序输出:
print(df2.sort_values(by = 'B'))
选取某一个行索引对应的值:
print(df2['A']) # 或print(df2.A)
多行或者多列索引:
print(df2[a:b]) # a,b分别是对应的行索引名称或者列索引名称或者是对应的序号,从0开始
使用标签loc进行索引:
print(df2.loc[2]) #返回第3行的索引值
print(df2.loc[:,['A','B']]) #返回A和B列的值,其行索引和列索引一并返回
print(df2.loc[2,['A']]) #返回第3行第A列的索引值,具体到某一个值,前面可能不止一个值
根据序列iloc索引:
print(df2.iloc[3,1]) #返回第四行第二列的数据,只能看到一个数据
print(df2.iloc[3:5,1:3]) #返回第4~5行,第2~3列的数据,其左边的索引和上边的索引都可以看到
print(df2.iloc[[1,3],1:3]) #返回第2行和第4行,第2~3列的数据,同样的左边的索引和上边的索引都可以看到
混合选择:
print(df2.ix[:3,['A']]) #返回前三行,第A列的数据
通过判断的筛选:
print(df2[df2.A>0.5]) #先通过df2.A>0.5找到满足条件的所有行索引x,然后返回这些行索引x的所有列数据
对dataframe中的数据具体设置某个值也是一样的,能够索引到,然后等号右边输入要设置的值即可;
给dataframe加入某一列Series序列(长度必须一致):
df2['G'] = pd.Series([1,2,3,4], index = pd.date_range(0, 4)) #前面[1,2,3,4]是要加入的第7列G列的数据,index是对应的行索引名称
去掉dataframe中有NaN的行或列:
df2.dropna(axis = 0, how = 'any') #axis = 0是对行操作,1是对列操作;
# 'any'是只要存在NaN就删掉这一行或这一列,但行索引或者列索引名称不变;
# 如果是how = 'all',则要求这一行或者这一列全都是NaN才删除
采用其他数值替代NaN:
df2.fillna(value = 0) #采用数值0替代NaN
检测数据是否存在NaN,如果存在返回True:
np.any(df2.isnull()) == True
文件读取:
pd.read_csv('xxx') # xxx为文件名称
文件存储:
df2.to_pickle('xxx') # xxx为文件名称
合并concat:
如果要重置左边的index,则concat([df1,df2,df3], axis = 0, ignore_index = True)
join:
未设定任何参数时,函数默认join=‘outer’。此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充:
下面是join = ‘inner’:
依据某一个dataframe的索引进行合并:
append:只能纵向合并:
根据key进行合并:
合并的时候也可以根据how = 'inner’和how = 'outer’来合并,没有的则是NaN;
如果加上参数indicator = True或者’indicator_column’,则最后一列会有一个名为_merge或者’indicator_column’的列索引名称,其下面对应的值表示是根据哪个dataframe进行合并的;