赞
踩
学习或工作中,经常要对表格类型的数据进行处理。对那些数据量不大的任务,学习数据库似乎是一个杀鸡用牛刀的做法,这时候不妨试试python吧。
笔者本人将自己参加24年美赛(美国大学生数学建模竞赛MCM/ICM)过程中使用python进行数据处理的经验记录在这,供有需要的朋友们查阅。
正文之前先说明一下,笔者当时美赛中选择的是C题,数据集名称为Wimbledon_featured_matches.csv,接下来通篇将以这个数据集为例
数据集可以在官网下载,链接附在下面
https://www.contest.comap.com/undergraduate/contests/mcm/contests/2024/problems/
或
https://www.comapmath.com/MCMICM/index.html
如果官网打不开,也可以点击下方的百度网盘分享获取资源
https://pan.baidu.com/s/1U0PHfMEJYpPYICrfAmXTqQ?pwd=3333
注:以下内容经过删改和编排,非比赛中实际应用的步骤
美赛的数据文件都是csv格式,而不是xls格式的。使用read_csv命令可以读取csv文件,使用to_csv命令可以写入csv文件
我们使用info方法探索数据
import pandas as pd
df = pd.read_csv('Wimbledon_featured_matches.csv')
df.info()
输出结果如下
下面让我们解释一下输出结果,可以发现:
要删去从多少行到多少行的数据,可以使用drop命令
import pandas as pd
df = pd.read_csv('Wimbledon_featured_matches.csv')
# 删除从2185行到2673行的数据
df = df.drop(df.index[2185:2673])
df.to_csv('Wimbledon_featured_matches1.csv', index=False)
这里index = False 指的是导出的文件不含索引列
如果我只想保留列名为’player1’和 'player2’的两列(对应于数据集中的第二列和第三列)
import pandas as pd
df = pd.read_csv('Wimbledon_featured_matches.csv')
df_selected = df[['player1', 'player2']]
df_selected.to_csv('Wimbledon_featured_matches2.csv', index=False)
import pandas as pd
df = pd.read_csv('Wimbledon_featured_matches.csv')
mean_speed = df['speed_mph'].head(3).mean()
df['speed_mph'].fillna(mean_speed, inplace=True)
# 保存更新后的DataFrame到CSV文件
df.to_csv('Wimbledon_featured_matches3.csv', index=False)
上述代码使用了以下函数:
使用dropna函数删去异常值所在的行,其中参数subset用于指定要进行异常值检查的列
import pandas as pd
data = pd.read_csv('Wimbledon_featured_matches.csv')
data = data.dropna(subset=['serve_width', 'serve_depth'])
data.to_csv('Wimbledon_featured_matches4.csv', index=False)
给定任务:要将两个行数一致的文件进行横向合并,即保证合并后的文件行数不变
使用concat函数进行合并
import pandas as pd
# 将多个csv文件的名称列为列表,使用循环逐个读取
file_list = ['Wimbledon_featured_matches1.csv','W1.csv']
dfs = [pd.read_csv(file) for file in file_list]
# axis=1表示按列合并
combined_df = pd.concat(dfs, axis=1)
combined_df.to_csv('Wimbledon_featured_matches5.csv', index=False)
import pandas as pd
data = pd.read_csv('Wimbledon_featured_matches.csv')
# 合并指定的两列数据为新的一列
data['combined'] = data[['serve_width','serve_depth']].apply(lambda row: f"({row[0]}-{row[1]})", axis=1)
data.to_csv('Wimbledon_featured_matches6.csv', index=False)
函数、参数解释:
import pandas as pd
df = pd.read_csv('your_file.csv')
# 将serve_width列重命名为new_serve_width
df.rename(columns={'serve_width': 'new_serve_width'}, inplace=True)
# 保存更新后的DataFrame到CSV文件
df.to_csv('your_updated_file.csv', index=False)
其中inplace=True表示在原始DataFrame上进行操作,不会将修改结果返回为新的一列
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。