Pythonpandas学习总结
Python pandas学习总结
pandas是做数据分析⾮常重要的⼀个模块,它使得数据分析的⼯作变得更快更简单。由于现实世界中数据源的格式⾮常多,但是pandas也⽀持了不同数据格式的导⼊⽅法,所以学习pandas⾮常有必要。
两种特殊数值:NAN (数值数据类型的⼀类数),全称Not a Number ,表⽰未定义或者不可表⽰的值,inf表⽰⽆穷,可能⽆穷⼤也可能⽆穷⼩。
常⽤⽅法
常⽤⽅
法
程序备注
创建
pandas
数据
df=pd.DataFrame({“列1”:[1,2,3],“列2”:[4,5,6]})#DataFrame类读取
excel数据到python
中
1”,skiprows=3,usecols=“C:F”,dtype=
{“old”:str,“name”:str},sheet_name=‘sheet2’)
#read_excel⽅法,header默认为0,即将第0⾏作为索引列,如果需要设置第n⾏为索
引列,则headers=n,若读取的数据中只有数据,没有有列索引,则需要添加
header=None来表⽰,同时可以通过df.columns=
[“name”,“old”,“sexuality”]来为数据新增列索引,index_col表⽰在导⼊数据
的时候就指定⾏索引,siprows=3表⽰跳过前3⾏,从第4⾏开始读
取,usecols="C:F"表⽰使⽤C:F列数据,⼀般⽤于数据前⼏⾏前⼏列为空⽩,dtype为
设置某列的数据类型,sheet_name表⽰读取excel中的某个sheet页
创建
excel并
将数据
输出到
excel中
<_excel(“路径”)#to_excel⽅法
设置
excel的
⾏索引
并更新
(替换原
本数据)
df=df.set_index(“列1”)#列1为想要设置的⾏索引,set_index⽅法
返回数
据的⾏
和列
print(df.shape)#主要为shape属性
返回数
据的列名,即属性
lumns) df.columns=
[“name”,“old”,“sexuality”]
#主要为colums属性,df.columns=[“name”,“old”,“sexuality”]来为数据新
增列索引
返回数
据的前
⼏⾏
print(df.head(n))#head()默认返回前5⾏,若返回n⾏则head(n)
返回数
据的后
⼏⾏
print(df.tail())#tail()默认返回前5⾏,若返回n⾏则tail(n) Series
常⽤⽅法程序备注
创建Series 1、d={‘x’:100,‘y’:200,‘z’:300} pd.Series(d)
2、 L1=[100,200,300] L2=[‘x’,‘y’,‘z’
]pd.Series(L1,index=L2) 3、
pd.Series([100,200,300],index=[‘x’,‘y’,‘z’])
3种⽅法创建Series,⽅法1是通过字典形式,index表⽰标签
创建含有⾏标签和列标签的Series
s1=pd.Series([1,2,3],index=[1,2,3],name=‘A’)s2=pd.Series([10,20,30],index=[1,2,3],name=‘B’)
s3=pd.Series([100,200,300],index=
[1,2,3],name=‘C’)
创建Series时name表⽰这些数据的列标签,index表⽰⾏标签
将⼏个Series合并为DataFrame (正确做法)
pd.DataFrame(s1.name:s1,s2.name:s2,s3.name:s3)
此⽅法将Series中的S1,S2,S3合并,并将原来的⾏标签作为⾏标签,将单个
Series作为⼀列
将⼏个Series合
并为DataFrame(错
误⽅法)pd.DataFrame([s1,s2,s3])
此⽅法虽然也能合并,但是标签错误,将单个Series作为⼀
⾏
设置特定位置的
值
df[“name” ].at[0]=1 或者df.at[0,“name”] =1令name列的第0个元素的值为1,at中只能为数字
对数据的某⼀列
应⽤函数
df.[“old”]=df.[“old”].apply(fx)或者⽤lambda函数代替fx函数,即df.[“old”]=df.[“old”].apply(lambda
x:x+2)
通过使⽤apply()⽅法来应⽤函数,fx为函数名,不加括号
排序
df.sort_values(by=
[‘old’,‘name’],inplace=True,ascending=
[True,False])
排序使⽤sort_values函数,by为排序依据,先按old,后按name,inplace表⽰在原数据上修改,ascending表⽰升序降序,默认为True,即升序,False 为降序,该式⼦表⽰old升序,name降序,即先对old升序排,再对name降
序排
查看到符合条件的特定数值
df.loc[df[‘old’].apply(fx)] 或者
df.loc[df.old.apply(fx)]或者⽤lambda函数代替fx,即
df.loc[df[‘old’].apply(lambds x:x+2)]loc⽤来定位特定位置,后边为⽅括号[],df[‘old’].apply(fx)表⽰对df数据的old列使⽤fx函数进⾏筛选,然后通过loc返回筛选后的值,函数fx不⽤
加括号
显⽰所有列
pd.options.display.max_columns=888
pd.set_option(‘display.max_columns’, None)#显⽰所有列 pd.set_option(‘display.max_rows’,
None)#显⽰所有⾏
pd.set_option(‘max_colwidth’,100) #设置value的
显⽰长度为100,默认为50
可能由于列数太多⽆法显⽰所有列,因此通过设置max_columns来展⽰
888(⼤于所有列)列
显⽰各个变量之间的相关系数表
())显⽰各个变量之间的相关系数,和stata⼏乎⼀样
数据合并1(EXCEL中的VLOOKUP功能
)
(df1,how=‘left’,on=‘ID’).fillna(0)
根据相同的’ID列’对df和df1进⾏合并,on表⽰根据哪⼀列进⾏合并(如果两个表对应的数名称不⼀样,不都是ID,那么可以将on替换为left_on和right_on,由于默认情况下,当df1中ID为nan时不进⾏合并,只取交集,因此通过how='left’,⽆论右边df1中ID列是否为nan,都按df列返回,即
以左边df中的ID为基础进⾏合并,fillna(0)表⽰将所有的nan替换为0数据合并2
.reset_index(drop=True)
同样数据纵向合并,但是是通过pandas⽽不是df,sheet1,sheet2表⽰需要
合并的数据所在的sheet页,rest_index表⽰重新设置⾏标签,否则默认将sheet1,sheet2原本的标签直接照搬,axis=0表⽰竖着合并,axis=1表⽰
横着合并
追加列df[“age”]=np.arrange(len(studets))
追加age列,数字⼀次为0,1,2递增数列
改变数据类型
df.old= df.old.astype(int)将df表中的old列转换为int格式
去除重复数据
df.drop_duplicates(subset=
[‘name’,‘old’],inplace=True,keep=‘first’)
subset表⽰在那列上去除重复值,inplace表⽰是否在原数据上进⾏替
换,keep表⽰当有重复时保留前边的重复值还是后边的
返回某个数据的
位置 a = df[(df.BoolCol 3)&(df.attr 22)].list()返回df数据中Boolcol为3,attr为22的标签
删除原标签,重新设置为0,1,2
data.index=[i for i in range(data.shape[0])]–
–
常⽤⽅法程序
备注
–常⽤⽅法程序备注
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–⼀:读取⽂件,read_csv⽅法
- 1准备CSV⽂件
Train_A_001.csv⽂件内容如下:
0.916,4.37,-1.372,0.102,0.041,0.069,0.018
0.892,3.955,-1.277,0.015,-0.099,-0.066,0.018
0.908,3.334,-1.193,0.033,-0.098,-0.059,0.018
1.013,3.022,-1.082,0.151,0.015,0.035,0.018
1.111,
2.97,-1.103,-0.048,-0.175,-0.171,0.019
1.302,3.043,-1.089,0.011,-0.085,-0.097,0.018
1.552,3.017,-1.052,0.066,-0.002,-0.036,0.019
1.832,
2.796,-0.933,0.002,-0.028,-0.075,0.019
2.127,2.521,-0.749,0.011,0.041,-0.022,0.019
2.354,2.311,-0.623,-0.038,0.012,-0.056,0.019
2.537,2.024,-0.452,0.039,0.089,0.031,0.019
2.639,1.669,-0.277,-0.005,0.036,-0.008,0.019
2.707,1.314,-0.214,0.013,0.031,-0.005,0.019
2.81,0.926,-0.142,0.062,0.046,0.031,0.019
- 2直接读取⽂件内容
import pandas as pd
filename = r'Train_A/Train_A_001.csv'
data = pd.read_csv(filename)
print(data)
read_csv读取的数据类型为Dataframe,通过obj.dtypes可以查看每列的数据类型结果如下;
0.916 4.37-1.3720.1020.0410.0690.018
00.8923.955-1.2770.015-0.099-0.0660.018
10.9083.334-1.1930.033-0.098-0.0590.018
2 1.0133.022-1.0820.1510.0150.0350.018
3 1.1112.970-1.103-0.048-0.175-0.1710.019
4 1.3023.043-1.0890.011-0.085-0.0970.018
5 1.5523.017-1.0520.066-0.002-0.0360.019
6 1.8322.796-0.9330.002-0.028-0.0750.019
7 2.1272.521-0.7490.0110.041-0.0220.019
8 2.3542.311-0.623-0.0380.012-0.0560.019
9 2.5372.024-0.4520.0390.0890.0310.019
102.6391.669-0.277-0.0050.036-0.0080.019
112.7071.314-0.2140.0130.031-0.0050.019
122.8100.926-0.1420.0620.0460.0310.019
由于该csv⽂件是没有列索引的,那么它默认你有列索引,并且把第⼀⾏的数据当做列索引,并且从第
⼆⾏开始设置了⾏索引,所以说列索引的设置⾮常重要,起码在这⾥看来是这样的,那么如何设置呢,下⾯就具体分析⼀下。
- 3列索引 header=?的含义
当加上header=None的时候,表明原始⽂件没有列索引,这样的话会默认⾃动加上,除⾮你给定名称。结果如下:
0123456
00.9164.370-1.3720.1020.0410.0690.018
10.8923.955-1.2770.015-0.099-0.0660.018
20.9083.334-1.1930.033-0.098-0.0590.018
3 1.0133.022-1.0820.1510.0150.0350.018
4 1.1112.970-1.103-0.048-0.175-0.1710.019
5 1.3023.043-1.0890.011-0.085-0.0970.018
6 1.5523.017-1.0520.066-0.002-0.0360.019
7 1.8322.796-0.9330.002-0.028-0.0750.019
8 2.1272.521-0.7490.0110.041-0.0220.019
9 2.3542.311-0.623-0.0380.012-0.0560.019
102.5372.024-0.4520.0390.0890.0310.019
112.6391.669-0.277-0.0050.036-0.0080.019
122.7071.314-0.2140.0130.031-0.0050.019
132.8100.926-0.1420.0620.0460.0310.019
当加上header=0的时候,表明原始⽂件的第0⾏为列索引。结果如下:
0.916 4.37-1.3720.1020.0410.0690.018
00.8923.955-1.2770.015-0.099-0.0660.018
10.9083.334-1.1930.033-0.098-0.0590.018
2 1.0133.022-1.0820.1510.0150.0350.018
3 1.1112.970-1.103-0.048-0.175-0.1710.019
4 1.3023.043-1.0890.011-0.085-0.0970.018
5 1.5523.017-1.0520.066-0.002-0.0360.019
6 1.8322.796-0.9330.002-0.028-0.0750.019
7 2.1272.521-0.7490.0110.041-0.0220.019
8 2.3542.311-0.623-0.0380.012-0.0560.019
9 2.5372.024-0.4520.0390.0890.0310.019
102.6391.669-0.277-0.0050.036-0.0080.019
112.7071.314-0.2140.0130.031-0.0050.019
122.8100.926-0.1420.0620.0460.0310.019
我们可以发现,第⼀⾏的数字被默认为列索引。
当没有列索引的时候,我们也可以⾃⼰指定索引名称,⽅便⾃⼰记录,代码如下:
import pandas as pd
filename = r'Train_A/Train_A_001.csv'
#names表⽰指定列索引为a~f
data = pd.read_csv(filename,header=None,names=('a','b','c','d','e','f','g'))
print(data)
a b c d e f g
00.9164.370-1.3720.1020.0410.0690.018
10.8923.955-1.2770.015-0.099-0.0660.018
20.9083.334-1.1930.033-0.098-0.0590.018
3 1.0133.022-1.0820.1510.0150.0350.018
4 1.1112.970-1.103-0.048-0.175-0.1710.019
5 1.3023.043-1.0890.011-0.085-0.0970.018
6 1.5523.017-1.0520.066-0.002-0.0360.019
7 1.8322.796-0.9330.002-0.028-0.0750.019
8 2.1272.521-0.7490.0110.041-0.0220.019
9 2.3542.311-0.623-0.0380.012-0.0560.019
102.5372.024-0.4520.0390.0890.0310.019
112.6391.669-0.277-0.0050.036-0.0080.019
122.7071.314-0.2140.0130.031-0.0050.019
132.8100.926-0.1420.0620.0460.0310.019
4,⾏索引 index_col = ?的含义
从上⾯的代码,我们可以发现,没有⾏索引,只要设置了列索引就⾏,但是有些时候有些需求也是需要列索引为⾃⼰定义的名称 当设置⾏索引为None的时候,也就是index_col = None,同时设置列索引的时候,代码如下:
import pandas as pd
filename = r'Train_A/Train_A_001.csv'
data = pd.read_csv(filename,index_col=None,header=None)
python怎么读取excel的数据print(data)
0123456
00.9164.370-1.3720.1020.0410.0690.018
10.8923.955-1.2770.015-0.099-0.0660.018
20.9083.334-1.1930.033-0.098-0.0590.018
3 1.0133.022-1.0820.1510.0150.0350.018
4 1.1112.970-1.103-0.048-0.175-0.1710.019
5 1.3023.043-1.0890.011-0.085-0.0970.018
6 1.5523.017-1.0520.066-0.002-0.0360.019
7 1.8322.796-0.9330.002-0.028-0.0750.019
8 2.1272.521-0.7490.0110.041-0.0220.019
9 2.3542.311-0.623-0.0380.012-0.0560.019
102.5372.024-0.4520.0390.0890.0310.019
112.6391.669-0.277-0.0050.036-0.0080.019
122.7071.314-0.2140.0130.031-0.0050.019
132.8100.926-0.1420.0620.0460.0310.019
当然了,当设置⾏索引为0的时候,也就是index_col = 0,则第⼀列为索引。
5,读取指定csv的某⼀列 usecols = [?]
在做数据分析的许多时候,我们会读取指定的某⼀列,使⽤的函数如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论