Pandas中的数据结构
数据框是指 :一种具有索引列的表格型数据结构,包含一个索引列和多个数据列。可以方便与外界的表格文件进行数据交换。
创建 DataFrame对象
import pandas as pd
dict = {'name':['张三','李四','王五'],'age':[18,20,19],'sex':['男','女','男'],'no':['001','002','003']}
df1 = pd.DataFrame(dict)
df1.index.name = 'id'
DataFrame 查询操作
df1.age #获取整列数据和索引
row = df1.iloc[2]
DataFrame 增加操作
df2 = df1._append([{'name':'小二','age':21,'sex':'男','no':'004'}],ignore_index = True)#增加多行
# ignore_index = False表示索引从0开始 True表示索引列按顺序累计
dict1 = {'name':['小二','李四','王五','王五','王五'],'age':[20,20,19,21,19],'sex':['男','女','男','男','男'],'no':['004','002','003','003','003']}
df2 = df1._append([pd.DataFrame(dict1)],ignore_index = True)#增加多行
df2['new_col'] = [1,2,3,4,5,6,7,8] #增加一列
name age sex no new_col
0 张三 18 男 001 1
1 李四 20 女 002 2
2 王五 19 男 003 3
3 小二 20 男 004 4
4 李四 20 女 002 5
5 王五 19 男 003 6
6 王五 21 男 003 7
7 王五 19 男 003 8
df3 = pd.DataFrame({'height':[177,155,180,185,160,180,175,180]})
df4 = pd.concat([df2,df3],axis=1)#按列添加
df3 = pd.DataFrame({'name':['小二'],'age':[20],'sex':['男'],'no':['004'],'height':[177],'new_col':[9]})
df4 = pd.concat([df2,df3],axis=0,ignore_index = True) #按行添加
DataFrame 删除操作
df3 = df2.drop(['name'],axis= 1) #删除一列数据
df3 = df2.drop([2]) #删除一行数据
'''
df.drop_duplicates(keep= , subset=[], inplace= )
keep: {‘first’, ‘last’, False},默认为’first’
保留项。保留第一个(first)/最后一个(last)/不保留(False)重复的项
subset:默认所有列
指定的列。即需要删除哪些列中重复的项,列用’'说明,用,隔开
inplace : {‘True’,‘False’},默认为False
是否在原数据上修改。False表示另存一个副本
'''
df2.drop_duplicates(keep = False,subset = ['age','name'],inplace = True)#去除重复的项
print(df2)
name age sex no new_col
0 张三 18 男 001 1
3 小二 20 男 004 4
6 王五 21 男 003 7
DataFrame 特殊操作
dates = pd.date_range('2023/3/15',freq='7D',periods= 3)
df2.index = dates
print(df2)
name age sex no new_col
2023-03-15 张三 18 男 001 1
2023-03-22 小二 20 男 004 4
2023-03-29 王五 21 男 003 7
DataFrame 时间序列查询
df3 = df2.loc['2023-3-10':'2023-3-25',['name','sex']]
print(df3)
name sex
2023-03-15 张三 男
2023-03-22 小二 男
DataFrame 转换为其它数据结构
print('DataFrame 转 ndarray\n',df2.values)
print('df2.values数据类型:',type(df2.values))
DataFrame 转 ndarray
[[‘张三’ 18 ‘男’ ‘001’ 1]
[‘小二’ 20 ‘男’ ‘004’ 4]
[‘王五’ 21 ‘男’ ‘003’ 7]]
df2.values数据类型: <class ‘numpy.ndarray’>
print('DataFrame 转 Series\n',df2['name'])
print("df2['name'] 数据类型:",type(df2['name']))
DataFrame 转 Series
2023-03-15 张三
2023-03-22 小二
2023-03-29 王五
Freq: 7D, Name: name, dtype: object
df2[‘name’] 数据类型: <class ‘pandas.core.series.Series’>
#数组和字典组合成一张表存如csv文件
name_list =["北京","天津","河北","山西","内蒙古","辽宁"]
name_list =[
"北京",
"天津",
"河北",
"山西",
"内蒙古",
"辽宁",]
data_gdp = {
2011: [
16251.93,
11307.28,
24515.76,
11237.55,
14359.88,
22226.7
],
2010: [
14113.58,
9224.46,
20394.26,
9200.86,
11672,
18457.27
],
2009: [
12153.03,
7521.85,
17235.48,
7358.31,
9740.25,
15212.49
],
2008: [
11115,
6719.01,
16011.97,
7315.4,
8496.2,
13668.58
]
}
data_gdp =pd.DataFrame(data_gdp)
index = pd.Series(name_list)
data_gdp = data_gdp.set_index(index)#设置索引列
data_gdp = data_gdp.T#转置
data_gdp.index.name = 'year'#设置索引列名称
data_gdp['max'] = data_gdp.max(axis=1).astype(int) #求一行数据的最大值
data_gdp['sum'] = data_gdp.sum(axis=1).astype(int)#求一行数据的的和
#按索引圣墟排列ascending = True ,降序False
data_gdp = data_gdp.sort_values(by = ['year'],ascending = True)
print(data_gdp)
data_gdp.to_csv('data/data_gdp.csv')
北京 天津 河北 山西 内蒙古 辽宁 max sum
year
2008 11115.00 6719.01 16011.97 7315.40 8496.20 13668.58 16011 79337
2009 12153.03 7521.85 17235.48 7358.31 9740.25 15212.49 17235 86456
2010 14113.58 9224.46 20394.26 9200.86 11672.00 18457.27 20394 103456
2011 16251.93 11307.28 24515.76 11237.55 14359.88 22226.70 24515 124414