最近在处理数据时,用到了Dataframe格式的数据,在这里记录一下Dataframe的一些基本操作
首先写一个csv文件
with open('data/t_pd.csv','a') as f:
for i in range(10):
f.write(",".join(str(item)for item in [1,2,3])+"\n")
注意,这里的“,"join()十分实用
在Python中,‘,’.join() 是一个字符串方法,用于将序列中的元素连接成一个字符串,元素之间用指定的分隔符分隔。这里的 ‘,’ 就是指定的分隔符,即逗号。
join() 方法的工作原理是遍历序列中的每个元素,将它们转换为字符串(如果它们不是字符串),然后将它们连接起来,同时在每个元素之间插入分隔符。
文件是这样:
接下来,用pd.read_csv就可以读取文件
import pandas as pd
f_1 = pd.read_csv('data/t_pd.csv')
print(1)
1 2 3
0 1 2 3
1 1 2 3
2 1 2 3
3 1 2 3
4 1 2 3
5 1 2 3
6 1 2 3
7 1 2 3
8 1 2 3
<class 'pandas.core.frame.DataFrame'>
因为这里在工程上需要保存目标文件,然后在外部读取,才先保存为csv文件,然后再用pd.read_csv读取文件,才介绍的这段代码。此外还可以直接将数据转化为Dataframe格式:
import numpy as np
import pandas as pd
a = np.array([
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3]
])
pd_data = pd.DataFrame(a)
print(pd_data)
print(type(pd_data))
0 1 2
0 1 2 3
1 1 2 3
2 1 2 3
3 1 2 3
4 1 2 3
5 1 2 3
<class 'pandas.core.frame.DataFrame'>
接下来是一些常用的Dataframe操作:
查看DataFrame信息:
print(pd_data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 6 non-null int32
1 1 6 non-null int32
2 2 6 non-null int32
dtypes: int32(3)
选择和修改数据
选择列
pd_data[0]
0 1
1 1
2 1
3 1
4 1
5 1
Name: 0, dtype: int32
选择行
pd_data.iloc[0]
0 1
1 2
2 3
添加和删除列
添加列
pd_data['new']=[6,6,6,6,6,6]
pd_data
0 1 2 new
0 1 2 3 6
1 1 2 3 6
2 1 2 3 6
3 1 2 3 6
4 1 2 3 6
5 1 2 3 6
添加行
pd_data.loc[7]=[7,7,7,7]
pd_data
0 1 2 new
0 1 2 3 6
1 1 2 3 6
2 1 2 3 6
3 1 2 3 6
4 1 2 3 6
5 1 2 3 6
7 7 7 7 7
删除行
pd_data.drop(7)
0 1 2 new
0 1 2 3 6
1 1 2 3 6
2 1 2 3 6
3 1 2 3 6
4 1 2 3 6
5 1 2 3 6
删除列
pd_data.drop('new',axis=1)
0 1 2
0 1 2 3
1 1 2 3
2 1 2 3
3 1 2 3
4 1 2 3
5 1 2 3
7 7 7 7
如果参数inplace设置为True,则将更改原始Data
pd_data.drop(7,inplace=True)
pd_data.drop('new',axis=1,inplace=True)
pd_data
0 1 2
0 1 2 3
1 1 2 3
2 1 2 3
3 1 2 3
4 1 2 3
5 1 2 3
运算和统计描述
描述性统计
pd_data.describe()
0 1 2
count 6.0 6.0 6.0
mean 1.0 2.0 3.0
std 0.0 0.0 0.0
min 1.0 2.0 3.0
25% 1.0 2.0 3.0
50% 1.0 2.0 3.0
75% 1.0 2.0 3.0
max 1.0 2.0 3.0
计算总和
pd_data.sum()
0 6
1 12
2 18
dtype: int64
pd_data.sum(1)
0 6
1 6
2 6
3 6
4 6
5 6
dtype: int64
计算平均值
pd_data.mean()
0 1.0
1 2.0
2 3.0
dtype: float64
pd_data.mean(1)
0 2.0
1 2.0
2 2.0
3 2.0
4 2.0
5 2.0
dtype: float64
索引和排序
索引
指定的列将被设置为索引
pd_data['new']=[str(i) for i in range(6,12)]
pd_data
0 1 2 new
0 1 2 3 6
1 1 2 3 7
2 1 2 3 8
3 1 2 3 9
4 1 2 3 10
5 1 2 3 11
pd_data.set_index('new')
0 1 2
new
6 1 2 3
7 1 2 3
8 1 2 3
9 1 2 3
10 1 2 3
11 1 2 3
排序
import random
pd_data['a'] = [str(random.random()) for i in range(6)]
pd_data['b'] = [str(random.random()) for i in range(6)]
pd_data
0 1 2 new a b
0 1 2 3 6 0.5809154982534012 0.6472438436842606
1 1 2 3 7 0.8832481123517181 0.3631676478794732
2 1 2 3 8 0.07186754736533463 0.757753287695164
3 1 2 3 9 0.8635028791487391 0.02425099355183047
4 1 2 3 10 0.628171413903018 0.4545331697214814
5 1 2 3 11 0.25724579828162364 0.6315262014843183
pd_data.sort_values(by='a',ascending=True)
0 1 2 new a b
2 1 2 3 8 0.07186754736533463 0.757753287695164
5 1 2 3 11 0.25724579828162364 0.6315262014843183
0 1 2 3 6 0.5809154982534012 0.6472438436842606
4 1 2 3 10 0.628171413903018 0.4545331697214814
3 1 2 3 9 0.8635028791487391 0.02425099355183047
1 1 2 3 7 0.8832481123517181 0.3631676478794732