一、Pandas简介

https://inter.joyfulpandas.datawhale.club/Content/ch2.html#

二、Pandas基本操作-Jupyter

Pandas-Basis-Operations in Jupyter Notebook
ipynb转化为md

1
2
3
4
5
# 安装 nbconvert
pip install nbconvert

# 转换 .ipynb 文件为 .md 文件
jupyter nbconvert --to markdown notebook.ipynb

数据导入

1
import pandas as pd
1
2
df = pd.read_csv('./dataset/output.csv')
df

数据查看

1. 查看数据前五行, 后五行

1
2
print(df.head())
print(df.tail())

2. 查看数据信息(如数据类型、非空值数量等):

1
print(df.info())

3. 查看数据描述性统计信息(如均值、标准差等):

1
print(df.describe())

4. 查看数据列名

1
print(df.columns)

5. 查看数据索引

1
print(df.index)

6. 按列名选择数据

1
print(df['ef100'])

数据修改

列操作

7. 按列名修改数据:

1
2
df['index'] = [str(x) for x in range(len(df))]
print(df)

8. 按列条件筛选数据行

1
2
3
filtered_df = df[df['ef100'] > 0]
filtered_df
# print(filtered_df)

9. 按列条件修改数据

1
2
df.loc[df['ef100'] > 0, 'ef100'] = 0
print(df)

10. 按条件删除数据

1
2
df = df[df['ef100'] != 0]
print(df)

11. 添加新列

1
2
df['index^2'] = [x*x*x for x in range(len(df))]
print(df)

12. 删除列

1
2
df = df.drop(['index^2', 'index', 'ef111'], axis=1)
print(df)

13. 重命名列

1
2
3
df = df.rename(columns={'mass': 'atomic mass'})
print(df)

14. 设置索引

1
2
df = df.set_index('Key')
print(df)

15. 重置索引

1
2
df = df.reset_index()
print(df)

行操作

16. 数据行排序

1
2
sorted_df = df.sort_values(by='radius')
print(sorted_df)

17. 数据行分组

1
2
3
4
df.loc[['A' in strkey for strkey in df['Key']], 'Key'] = 'A+'
grouped_df = df.groupby('Key')
# print(grouped_df.mean()) # 计算分组后的平均值
print(grouped_df.get_group('A+'))
1
2
3
4
for name, group in grouped_df:
print(f"Group: {name}")
print(group)
print("\n")

18. 合并数据行

1
2
3
4
data2 = {'Key': ['A', 'B', 'C', 'D'], 'ef100': [9, 9, 9, 9], 'ef_sub_100': [4, 4, 4, 4]}
df2 = pd.DataFrame(data2)
merged_df = pd.concat([df, df2])
print(merged_df)

19. 插入数据行

1
2
3
# 插入新行,需要全部补全数值
df.loc[1.5] = ['B', 25, 1, 1, 1, 1, 1] # 序号是1.5
print(df)
1
2
3
# 插入新行,只指定部分列的值,其余列自动填充为 NaN
df.loc[2.5] = {'Key': 'C', 'ef100': 1, 'ef_sub_100': 1}
print(df.tail())

20. 删除数据行

1
2
df = df.drop([1, 2])                # 删除第1,2行
print(df)

21. 填补列缺失值

1
2
df['melting'] = df['melting'].fillna(0)
print(df)

22. 去除重复值

1
2
df.loc[3.5] = {'Key': 'C', 'ef100': 1, 'ef_sub_100': 1, 'melting': 0}
print(df.tail())
1
2
df = df.drop_duplicates()
print(df.tail())

23. 数据透视表

NBA数据样例
https://www.cnblogs.com/Yanjy-OnlyOne/p/11195621.html

1
2
pivot_table = pd.pivot_table(df, values=['ef100','ef_sub_100'], index=[u'Key',u'melting'])
print(pivot_table)

24. 数据转置

1
2
3
transposed_df = df.T
print(transposed_df)

25. 数据合并(按行)

1
2
df3 = pd.DataFrame({'Key': ['D'], 'melting': [300], 'ef100': [0]})
print(df3)
1
2
connected_df = pd.concat([df, df3])
print(connected_df)

26. 数据行切片

1
2
sliced_df = df[3:4]
print(sliced_df)

27. 数据行迭代

1
2
for index, row in df.iterrows():
print(row)

28. 数据过滤

1
2
filtered_df = df[(df['melting'] > 1000) & (df['ef_sub_100'] < 0)]
print(filtered_df)

29. 数据替换

1
2
df['Key'] = df['Key'].replace('A+', 'A')
print(df)

30. 数据映射

1
2
3
mapping = {'A': 'A++', 'B': 'B++'}
df['Key'] = df['Key'].map(mapping).fillna(df['Key'])
print(df)

参考资料

  1. 加速Pandas,https://mp.weixin.qq.com/s/3eKWO4iT08mrNWfG3BGwSQ
  2. https://mp.weixin.qq.com/s/FPkPUqxLXqBi8b_p30wlWg