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 创建
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)
|
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"}) # 同样的方式修改行名
|
- 如果想要筛选出 B列大于零 的行:
- 如果想要筛选出 B列中大于零 的行,同时只显示B列的数据:
1
| df2 = df['B'][df['B'] >0]
|
- 如果想要筛选出 B列大于零,同时C列小于零的行:
1
| df3 = df[(df['B']>0)&(df['C']<0)] # 这里&符号可以实现多条件的筛选
|