文章

Pandas 学习笔记

1 Series

1.1 Series 创建

  • 根据列表创建:
1
s1 = pd.Series([4,7,-5,3]) # 默认 index: 0, 1, 2, ...
0    4
1    7
2   -5
3    3
dtype: int64
  • 根据列表创建并制定索引
1
s2 = pd.Series([4,7,-5,3],index=['d','b','a','c']) # 指定 index
d    4
b    7
a   -5
c    3
dtype: int64
  • 根据字典创建:
1
2
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000} # 指定了index 名称和其对应的值
s3 = pd.Series(sdata)
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64
  • 根据字典创建,并指定索引:
1
2
3
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
states = ['California','Ohio','Texas','Oregon'] # 跟上面差不多,只不过再根据该列表指定的 index 重新排序
s4 = pd.Series(sdata,index = states)
California        NaN
Ohio          35000.0
Texas         71000.0
Oregon        16000.0
dtype: float64

1.2 访问 Series

  • 索引值访问;
  • 下标数字访问;
  • 传入含有多个索引值的列表,返回一个 Series
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# s2:
'''
d    4
b    7
a   -5
c    3
dtype: int64
'''

s2[2] # -5

s2['a'] # -5

s2[['a','b','d']]
# 输出
'''
a   -5
b    7
d    4
dtype: int64
'''

1.3 切片

与利用下标进行切片不同,使用标签进行切片时,末端是包含的:

1
2
3
4
5
obj['b':'c']
# 输出
b    1.0
c    2.0
dtype: float64

2 DataFrame

2.1 创建

  • 创建空 DataFrame
1
df = pd.DataFrame()
  • 从文件读取
1
2
df1 = pd.read_excel("filename.xlsx")
df2 = pd.read_csv("filename.csv")
  • 直接创建,无数据
1
pd.DataFrame(columns=['A', 'B', 'C'], index=[0,1,2])
  • 从二维数组创建
1
2
3
4
5
6
7
pd.DataFrame(data=[['Apple',5],
                   ['Banana',10],
                   ['Cherry',8],
                   ['Dates',3],
                   ['Eggfruit',7]],
             columns = ['Fruits','Quantity'],
             index=[1,2,3,4,5])
  • 从字典创建

注意,这里的键值是作为 Column 值。

1
2
3
4
fruits_dict = { 'Fruits':['Apple','Banana','Cherry','Dates','Eggfruit'],
                'Quantity': [5, 10, 8, 3, 7],  
                'Color': ['Red', 'Yellow', 'Red', 'Brown', 'Yellow']}
pd.DataFrame(fruits_dict)
  • 从 Series 创建
1
df2 = pd.DataFrame(pd.Series(np.random.randint(1, 10, 100)), columns = ['xxx'])

2.2 增加、修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dataFrame["新增列"] = 6
# 新增行
dataFrame.loc["c"] = [55,88,99,66]
dataFrame

	第一列	第二列	第三列	新增列
a	1		2		3		6
b	4		5		6		6
c	55		88		99		66

# 另外,append也可以增加,但是它增加的索引是默认值,而且之前的index会变列
dataFrame.append([55])

	0	新增列	第一列	第三列	第二列
a	NaN	6.0 	1.0	 	3.0		2.0
b	NaN	6.0 	4.0		 6.0	5.0
c	NaN	66.0	55.0	 99.0	88.0
0	55.0 NaN 	 NaN	NaN		NaN
1
2
df.append(Series, ignore_index=True)
# 增加一行,记得 ignore_index

2.3 删除

1
2
3
4
5
6
7
# 删除行
df.drop('Charlie', axis=0)
# 默认值为axis = 0,因此可以省略axis。
print(df.drop('Charlie'))

# 删除列,注意这里的0是列名哦
dataFrame.drop('age', axis=1)

2.4 查看

1
2
3
4
5
# 前N行,不写参数N,则是前五行
dataFrame.head(N)

# 后N行,不写参数N,则是后五行
dataFrame.tail(N)

2.5 保存至文件

1
dataFrame.to_excel("输出.xlsx",index=False,sheet_name="1")

2.6 操作

  • 排序
1
2
3
4
df.sort_values(by=0,ascending=False,axis=1)
# by: 根据该列/行名排序
# ascending: 升序,默认为 True
# axis: 给列排序,默认为0
  • 重命名

主要用到的参数有:

  • columns:列名
  • index:行名
  • axis:指定坐标轴
  • inplace:是否替换,默认为False。inplace为False时返回修改后结果,变量自身不修改。inplace为True时返回None,变量自身被修改。
1
2
3
df.rename(columns={"A": "a", "B": "c"})  # 修改columns。inplace未设置,返回修改后的结果

df_re = df.rename(index={0:"0a",1:"1a"})  # 同样的方式修改行名
  • 筛选
  1. 如果想要筛选出 B列大于零 的行:
    1
    
    df1 = df[df['B']>0]
    
  2. 如果想要筛选出 B列中大于零 的行,同时只显示B列的数据:
    1
    
    df2 = df['B'][df['B'] >0]
    
  3. 如果想要筛选出 B列大于零,同时C列小于零的行:
    1
    
    df3 = df[(df['B']>0)&(df['C']<0)]  # 这里&符号可以实现多条件的筛选
    
本文由作者按照 CC BY 4.0 进行授权

© Dignite. 保留部分权利。 由  提供CDN加速。

浙ICP备2023032699号 | 使用 Jekyll 主题 Chirpy