【总结】Pandas DataFrame 使用方法 |
您所在的位置:网站首页 › dataframe的drop › 【总结】Pandas DataFrame 使用方法 |
原文链接 https://www.cyberlight.xyz/passage/pandas-dataframe 前段时间为参加 泰迪杯竞赛,熟悉了Pandas用法,这里做一篇记录,总结Pandas下DataFrame数据结构的各种用法。 运行环境: Ubuntu 20.04 LTS, Python 3.8.2 一、创建DataFrame1.使用 二维列表 创建Dataframe import pandas as pd import numpy as np data_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #需要导入DataFrame的二维列表 data = pd.DataFrame(data_list, columns = ['one','two','three']) #columns为每一列的列名该组数据输出如下图 2.使用 字典 创建Dataframe import pandas as pd import numpy as np data_dict = { 'one' : [1, 4, 7] , 'two' : [2, 5, 8] , 'three' : [3, 6, 9] } data = pd.DataFrame(data_dict)该组数据输出如下图 由此可知,字典中的键为Dataframe的列名,值为Dataframe一列的所有数据 二、Dataframe整表修改仍以该表为例 1.新增表中的列名 新增 four 列 columns = data1.columns.values.tolist() #获取原表列名 columns.append('four') #新增列名到列表 data1 = data1.reindex(columns = columns) #将新列名保存到表中2.修改表中的列名 修改 three列 为 super列 data = data.rename(columns={'three':'super'})输出如下图 3.调整表中列的顺序 将two列和three列交换顺序 data = data[['one', 'three', 'two']]4.转换列的数据类型 将 one列 数据类型 转为 str data['one'] = data['one'].astype("str")5.设置某列为索引 设置one列为索引 data.set_index(["one"], inplace=True)6.重置表索引 data.reset_index()三、Dataframe的增、删操作现有Dataframe数据结构的data1和data2 按行添加 将data2添加到data1中: data1 = data1.append(data2, ignore_index=True) 按行删除 将data1中第n行删除: data1 = data1.drop(labels = n) 按列删除 将data1中 two、three列删除 #axis默认为0时,代表删除行,axis=1时代表删除列 data1 = data1.drop(['two', 'three'], axis=1) 以如下代码创建的 data1 和 data2 为例 import pandas as pd import numpy as np data_list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] data1 = pd.DataFrame(data_list1, columns=['one','two','three'])data1输出为 data2输出为 现将data2添加到data1后面 # ignore_index=True 会忽略data2的索引,自动计算索引添加到data1 data1 = data1.append(data2, ignore_index=True)输出为 现在将data1中第4行删除 data1 = data1.drop(labels = 4)输出为 1.数据定位 这里只介绍通过loc定位 loc用法 loc[index, column_name] #index为Dataframe的索引,column_name为列名 若您尚不明白索引,请点击此处访问Pandas官方文档 现在仍然以下图数据为例, 访问某行某列的数据 访问 第2行 列名two 的数据,正确操作如下 data.loc[1, 'two']该操作的输出为5 访问某行的数据 访问第2行的数据 data.loc[1]该操作的输出为 one 4 two 5 three 6 Name: 1, dtype: int64访问某列的数据 访问 列名为two 的数据 data.loc[:]['two']该操作的输出为 0 2 1 5 2 8 Name: two, dtype: int642.访问DataFrame表 数据和上文相同 访问所有列名 data.columns.values.tolist() 访问所有行名 data._stat_axis.values.tolist() 访问 某几行 的数据 如下操作访问 第1到2行 的数据 data[0:2] #访问第1行到第2行的数据。取第1行的数据,不取第3行的数据(左闭右开)访问 某列 或 几列 的数据 访问 one列 data['one'] 或 data.one 访问 one列 和 two列 data[['one', 'two']] 通过head访问前n行 访问前2行的数据 data.head(2) 通过tail访问后n行 访问后2行的数据 data.tail(2) 五、遍历Dataframe示例说明 现在遍历该表 #index 为 遍历出的索引 #row 为 遍历出的行 for index, row in data.iterrows(): print(index) # index为该行的索引 print(row['one']) # row['one'] 或 row['two'] 为该行 one列 对应的数据 print('')以上代码的输出如下图所示 若需要对遍历出的数据进行修改,请使用前文 第三点第1点 数据定位 的方法修改数据 六、Dataframe对应的SQL操作示例数据 1.SELECT 选择 one、two 列的数据 SQL语句 SELECT one, two FROM data LIMIT 2Python语句 data[['one', 'two']].head(2)输出如下 2.WHERE SQL语句 SELECT * FROM data WHERE two = 2Python语句 data[data['two'] == 2]输出如下 若选择出的DataFrame为具体某一格,可在对象后加上.values[0]获取方格内的值 SQL语句 (and) SELECT * FROM data WHERE one = 4 and two = 5Python语句 data[(data['one'] == 4) & (data['two'] == 5)]输出如下 SQL语句 (or) SELECT * FROM data WHERE one = 1 or two = 3Python语句 data[(data['one'] == 1) | (data['two'] == 3)]3.Group By SQL语句 (分组时计数) SELECT one, two, COUNT(*) FROM data GROUP BY onePython语句 #as_index = False 避免将 被分组的列 作为索引 data.groupby(['one', 'two'], as_index = False).size() #.size()返回的是serise,不受as_index = False影响 #如果不需要分组时计数,只需要分组时保留未分组列的每个分组集的第一行数据,则将 .size() 改为 .first() 即可SQL语句 (分组时求和) SELECT one, two, SUM(three) FROM data GROUP BY onePython语句 #as_index = False 避免将 被分组的列 作为索引 data.groupby(['one', 'two'], as_index = False)['three'].sum()若是求平均值,将 .sum() 改为 .mean() SQL语句 (分组时对不同列进行不同操作) SELECT one, COUNT(*), SUM(three) FROM data GROUP BY one, twoPython语句 data.groupby('one', as_index = False).agg({'two': np.size, 'three': np.sum})七、DataFrame排序示例数据 输出内容 data.describe() #查看数据的基本情况 data.isnull().sum() #显示每一列中有多少个缺失值 data = data.fillna(0) #使用0填充缺失值 data.列名.value_counts() #统计某列中 唯一值 出现的次数 data = data.drop_duplicates() #去掉重复行 九、CSV文件输入输出import pandas as pd import numpy as np #pd解决中文编码问题 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) #输入csv #encoding为编码 data = pd.read_csv('input.csv', encoding = "gb2312") #输出csv data.to_csv('output.csv') |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |