查看原文
其他

Pandas库 | DataFrame类常用知识点总结

Karlijn 大邓和他的Python
2024-09-09

pandas是最有用的Python数据分析库, 两个数据类型DataFrame和Series,值的我们反复接触、学习和实验,逐渐的将pandas独特的语法掌握。


DataFrame是什么?

DataFrame是一种二维数据类型, 跟 Excel中的数据结构差不多, 即

  • 每行代表一条记录
  • 每列代表一个字段(变量)

每列(行),看做一个序列Series,在pandas中就是pd.Series类型的数据, 由很多pd.Sereis组成的数据就是DataFrame。

一、创建DataFrame

创建DataFrame有两种方式

  1. 使用pd.read_csv()/ pd.read_excel() 从csv、xlsx等文件导入, 得到DataFrame
  2. 使用pd.DataFrame()函数构造DataFrame
import pandas as pd 

data = {'name': ['David''Mary''Jessica''John'],
        'age': ['25''30''31''20'],
        'gender': ['male''female''female''male']}
                
df = pd.DataFrame(data)
df

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male

二、选中某行(列)

  1. df.loc[row, :] 选中第row行所有数据
  2. df.loc[row:row, :] 选中第row行所有数据
  3. df.loc[row1: row2, ] 选中从row1至row2行的所有数据
  4. df.loc[:, col] 选中第col列所有数据
  5. df.loc[:, [col]] 选中第col列所有数据
  6. df.loc[:, cols] 选中cols列的所有数据
#选中第二行所有数据,返回结果为Series
df.loc[2, :]
name Jessica
age 31
gender female
Name: 2, dtype: object
#选中第二行所有数据,返回结果为DataFrame
df.loc[2:2, :]

nameagegender
2Jessica31female
#选中某列所有数据,返回结果为Series
df.loc[:, 'gender']
0 male
1 female
2 female
3 male
Name: gender, dtype: object
#选中某列所有数据,返回结果为DataFrame
df.loc[:, ['gender']]

gender
0male
1female
2female
3male
#选中某几列所有数据,返回结果为DataFrame
df.loc[:, ['age''gender']]

agegender
025male
130female
231female
320male

三、新建某行(列)

  • df[colname] = col_data 新增一列(字段)数据
  • df.loc[row] = row_data 新增一条行(记录)数据
#复制实验数据
df2 = df.copy()
df2

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male
#新增nation字段列
df2['nation'] = ['US''UK''UK''US']
df2

nameagegendernation
0David25maleUS
1Mary30femaleUK
2Jessica31femaleUK
3John20maleUS
#新建(增)一行数据
df2.loc[4] = ['Robert'22'male''US']
df2

nameagegendernation
0David25maleUS
1Mary30femaleUK
2Jessica31femaleUK
3John20maleUS
4Robert22maleUS

四、删除

  1. df.drop_duplicates() 删除重复的数据
  2. df.drop() 删除某行(列)
df3 = df.copy()
df3.loc[4] = ['John'20'male']
df3

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male
4John20male
# 根据name字段删除重复的数据
#inplace=True,操作后会修改df3原始数据
#df3.drop_duplicates(inplace=True, subset='name')

df3.drop_duplicates(subset='name')

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male
#删除某行(索引值)的数据
#inplace=True,操作后会修改df3原始数据
#df3.drop(1, inplace=True)
df3.drop(4)

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male
#删除gender字段列
#inplace=True,操作后会修改df3原始数据
#df3.drop('gender', axis=1, inplace=True)
df3.drop('gender', axis=1)

nameage
0David25
1Mary30
2Jessica31
3John20
4John20

五、行列重命名

使用 df.rename() 重命名dataframe

df4 = df.copy()
df4

nameagegender
0David25male
1Mary30female
2Jessica31female
3John20male
#重命名 字段(列)名
df4.rename(columns = {'gender''sex'}, inplace=True)
df4

nameagesex
0David25male
1Mary30female
2Jessica31female
3John20male
# 重命名行索引index
df4.rename(index = {0'a'
                    1:'b'
                    2:'c'
                    3:'c'})

nameagegender
aDavid25male
bMary30female
cJessica31female
cJohn20male

六、替换

df5 = pd.DataFrame({"Student1":['OKs','Awful','Acceptable'], 
                    "Student2":['Perfect','Awful','OK'], 
                    "Student3":['Acceptable','Perfect','Poor']})

df5

Student1Student2Student3
0OKsPerfectAcceptable
1AwfulAwfulPerfect
2AcceptableOKPoor
# 将评级单词改为对应数字序列
df5.replace(['Awful''Poor''OK''Acceptable''Perfect'], 
            [0,  1,  2,  3,  4]) 

Student1Student2Student3
0OKs43
1004
2321
# 将评级单词改为对应数字序列
# 使用正则表达式匹配OK为2
df5.replace(['Awful''Poor''OK*''Acceptable''Perfect'], 
            [0,  1,  2,  3,  4],
            regex=True

Student1Student2Student3
0243
1004
2321

七、 识别日期

import pandas as pd

#自动识别日期数据
pd.read_csv('yourFile', parse_dates=True)

#或指定日期所在列的字段名
pd.read_csv('yourFile', parse_dates=['columnName'])

#指定日期字段的日期格式进行解析
dateparser = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
pd.read_csv(infile, parse_dates=['columnName'], date_parser=dateparse)

八、保存

df.to_csv('myDataFrame.csv', encoding='utf-8')
df.to_excel('myDataFrame.xlsx')



精选文章

管理世界 | 使用文本分析词构建并测量短视主义

管理世界 | 使用 「经营讨论与分析」 测量 「企业数字化指标」

支持开票 | Python实证指标构建与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

PNAS | 使用语义距离测量一个人的「创新力(发散思维)得分

MS | 使用网络算法识别『创新的颠覆性与否

金融研究 | 文本相似度计算与可视化

金融研究 | 使用Python构建「关键审计事项信息含量」

视频分享 | 文本分析在经管研究中的应用

转载 | 金融学文本大数据挖掘方法与研究进展

文本分析 | 「MD&A信息含量」指标构建代码实现

可视化 | 绘制《三体》人物关系网络图

长期征稿 | 欢迎各位前来投稿

17G数据集 | 深交所企业社会责任报告

70G数据集 | 上市公司定期报告数据集

27G数据集 | 使用Python对27G招股说明书进行文本分析

数据集 | 585w企业工商注册信息

数据集 | 90w条中国上市「公司高管数据

可视化 | 绘制《三体》人物关系网络图

认知的测量 | 向量距离vs语义投影

Asent库 | 英文文本数据情感分析

tomotopy | 速度最快的LDA主题模型

100min视频 | Python文本分析与会计

安装python包出现报错:Microsoft Visual 14.0 or greater is required. 怎么办?

如何正确读入文本数据不乱码(解决文本乱码问题)

Faker库 | 生成实验数据

使用R语言绘制文本数据情感历时趋势图

NiceGUI库 | 简单易懂的Web GUI开发包;可开发数据标注工具、心理学实验工具等

CheatSheet | Python文本数据处理速查表

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存