Task1-pandas基础学习笔记
程序员文章站
2022-05-26 21:41:32
...
Task1-pandas基础学习笔记
pandas简易入门
pandas应用的主要方向在于对数据的整理,pandas基于numpy,具有十分强大的数据整合功能,在生成Series及DataFrame时,都以二维列表的形式展现,下面主要介绍各种基本函数
文件读取与写入
为了方便,使用head()函数,使用该函数提取前5个数据,比较具有代表性
1.csv文件
df = pd.read_csv('data/table.csv').head() #读取
df.to_csv('data/table.csv', index=False) #写入,并去掉行索引
2.txt文件
df_txt = pd.read_table('data/table.txt', sep='_')
#sep为分隔符参数
3.xls或xlsx格式
df_excel = pd.read_excel('data/table.xlsx').head() #读取
df.to_excel('data/new_table2.xlsx', sheet_name='Sheet1') #写入
基本结构
Series
Series基本的结构由索引值(index)及值(values)构成,一般为n*2列的列表,其他属性还包括名字(name),类型(dtype)
1.创建一个Series列表:
# 第一种方法(一般)
list_1 = np.random.randn(5) #可以随机生成
list_2 = [1,2,3,4,5] #也可以自己写
data = pd.Series(list_1,index=['a','b','c','d','e'],name='这是一个Series',dtype='float64')
# 第二种方法(根据字典创建)
dict_data = {'a':1,'b':2,'c':3,'d':4,'e':5}
data = pd.Series(dict_data)
data.index = ['d','e','b','c','a'] #更换索引值
2.Series列表基本的属性:
data.values
data.name
data.index
data.dtype
len(data) #返回data的长度
3.Series中的具体值:
data['a'] #根据索引值定位值
data[['a','b']] #多个值
data[0:2] #对data进行切片
data.value_counts() #计算重复元素出现的次数
# 判断某个索引值是否存在
print('a' in data) #返回一个bool值
# 检测缺失数据
print(data.isnull())
4.Series可以调用很多的函数,这些函数支持Numpy运算
DataFrame
DataFrame是Series的升级版,Series中一个索引值对应一个值,而在DataFrame中,一个索引值对应很多种类的值,因此信息量更加庞大
1.创建DataFrame
df = pd.DataFrame({'col1':list('abcde'),'col2':range(5,10),'col3':[1.3,2.5,3.6,4.6,5.8]},index=list('一二三四五'))
# 也可根据字典创建
dict_df = {'col1':list('abcde'),'col2':range(5,10),'col3':[1.3,2.5,3.6,4.6,5.8]}
df = pd.DataFrame(dict_df)
2.具体的操作
# 可以指定排练顺序
df = pd.DataFrame(dict_df, columns=['col2','col1','col3'])
print(data.columns) #可查看列名称
# 修改行或列名
df.rename(index={'一':'one'},columns={'col1':'new_col1'})
# 索引对齐特性(会根据索引值进行计算)
df1 = pd.DataFrame({'A':[1,2,3]},index=[1,2,3])
df2 = pd.DataFrame({'A':[1,2,3]},index=[3,1,2])
df1-df2
# 列的删除
df.drop(index='五',columns='col1', inplace=True) #设置inplace=True后会直接在原DataFrame中改动
del df['col1'] #删掉col1这一列
df.pop('col1') #与python中pop相似,会返回删除的列,并同时在原DataFrame上进行修改
# 列的添加
df1.assign(C=pd.Series(list('def'))) #不会对原DataFrame做修改,相当于生成一个新的DataFrame
# 根据类型选择列
df.select_dtypes(include=['number']).head() #把值是数字的选择出来
df.select_dtypes(include=['float']).head() #把值是浮点数的选择出来
print(pd.merge(data1,data2,left_on='lkey',right_on='rkey'))
两个DataFrame合并
# 两个DataFrame进行合并,不指定连接方式,则取交集
data1 = pd.DataFrame({
'key':['a','b','c','s','r','p'],
'data1':[1,2,3,4,5,6]
})
data2 = pd.DataFrame({
'key':['a','b','c'],
'data1':[4,5,6]
})
print(pd.merge(data1,data2))
# 添加参数
print(pd.merge(data1,data2,how='outer'))
# 以谁为准
how='left'
how='right'
#两个DataFrame进行合并,指定连接的列名称
data1 = pd.DataFrame({
'key':['a','b','c','s','r','p'],
'data1':[1,2,3,4,5,6]
})
data2 = pd.DataFrame({
'key':['a','b','c'],
'data1':[4,5,6]
})
print(pd.merge(data1,data2,on='key'))
#分别指定
data1 = pd.DataFrame({
'lkey':['a','b','c','s','r','p'],
'data1':[1,2,3,4,5,6]
})
data2 = pd.DataFrame({
'rkey':['a','b','c'],
'data1':[4,5,6]
})
print(pd.merge(data1,data2,left_on='lkey',right_on='rkey'))
3.DataFrame与Series
将Series转换为DataFrame
s = df.mean()
s.to_frame()