Pandas的简单使用
Posted 哈喽喔德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas的简单使用相关的知识,希望对你有一定的参考价值。
import pandas as pd
基本创建
# Series的创建
s = pd.Series([1,2,3,4,5,6]) # 生成带索引的一维序列
print(s)
# Series可以使用index设置索引,可以重复
s = pd.Series(['a','b','c','d','e'],index=[100,200,100,400,500])
print(s)
# Series 可以用字典实例化
d = 'b': 1, 'a': 0, 'c': 2
s = pd.Series(d)
print(s)
# 切片
s = pd.Series(np.array([1,2,3,4,5]), index=['a', 'b', 'c', 'd', 'e'])
print(s[1:])
print(s[:-1])
print(s[1:] + s[:-1])
# DataFrame的基本创建
df = pd.DataFrame(np.arange(12).rshape((3,4)))
print(df)
print(df.index) # 打印行的名字
print(df.columns) # 打印列的名字
print(df.dtypes) # 打印每一列的数据类型
print(df.sample(10)) # 随机选择10行数据
# 用多维数组字典、列表字典生成 DataFrame
data =
'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]
frame = pd.DataFrame(data)
print(frame)
# 如果指定了列顺序,则DataFrame的列就会按照指定顺序进行排列,同理可以指定列的索引index
frame1 = pd.DataFrame(data, columns=['year', 'state', 'pop'])
print(frame1)
# 跟原Series一样,如果传入的列在数据中找不到,就会产生NAN值
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five'])
print(frame2)
# 通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series,返回的Series拥有原DataFrame相同的索引
print(frame2['state'])
# 列可以通过赋值的方式进行修改,例如,给那个空的“delt”列赋上一个标量值或一组值
frame2['debt'] = 16.5
print(frame2)
# 两列相乘生成新的列
frame2['new'] = frame2['debt' ]* frame2['pop']
print(frame2)
处理数据
df = pd.DataFrame(np.arange(12).reshape((3,4)),columns=['A','B','C','D'])
print(df.T) # DataFrame的转置
# DataFrame排序
df1 = df.sort_index(axis=1, ascending=False) # 对列名进行排序,因为操作的是一行列名,所以axis=1
print(df1)
df2 = df.sort_index(axis=0, ascending=False) # 对行名进行倒排序,ascending属性为False
print(df2)
df3 = df.sort_values(by='A',ascending=False)
print(df3)# 对单行(列)的值进行排序
# DataFrame选择
print(df['A']) # 单列选择
print(df.B) # 单列选择
print(df[1:3]) # 行范围选择
print(df.loc[0:1,['A','C']]) # 通过索引名称选择指定行和列
print(df.iloc[1:3, 1:3]) # 通过位置选择指定行和列
# DataFrame设置值
df.iloc[1,1] = 999 # 通过iloc改变值
df[df.A>4] = 0 # 通过真值表达式筛选索引改变值
# 处理丢失数据
df = pd.DataFrame(np.arange(24).reshape((6,4)),columns=['A','B','C','D'])
df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
print(df.dropna(axis=0, how='any')) # 表示有任意的一个NaN,就把该行删除掉
print(df.dropna(axis=1, how='all')) # 表示有某行(列)都为NaN,就把该列删除
print(df.fillna(value=0)) # 给为NaN的数据填充指定值
print(np.any(df.isnull()) == True) # 判断当前表格是否有丢失值
print(df.any()) # df中有一个为True,返回True
print(df.all()) # df中全为True,返回True
表格合并
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a', 'b', 'c', 'd'])
df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a', 'b', 'c', 'd'])
df = pd.concat([df1, df2, df3], axis=0, ignore_index=True) # 纵向合并表格,并重新设置索引
print(df)
# 设置连接参数join
df = pd.concat([df1, df2], join='outer') # 外连接,全部合并,空值填充
print(df)
df = pd.concat([df1, df2], join='inner') # 内连接,合并相同列,删除不同列
print(df)
画图
s = pd.Series(np.random.randn(1000), index=np.arange(1,1001))
s = s.cumsum()
s.plot()
plt.show()
df = pd.DataFrame(np.random.randn(1000,5), index=np.arange(1,1001),columns=list('ABCDE'))
df = df.cumsum()
df.plot()
plt.show()
以上是关于Pandas的简单使用的主要内容,如果未能解决你的问题,请参考以下文章
将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”
pandas.DataFrame.fillna - TypeError:只有整数标量数组可以转换为标量索引
如何解决 Python Pandas 中的“系列的真值不明确。使用 an.empty、a.bool()、a.item()、a.any() 或 a.all()”? [复制]