python-3.x - 如何改进删除熊猫行的代码
问题描述
我从 test.csv 开始,其中包含:
Name,Date,Weight
Jonny,03-08-2019,100
Sally,03-08-2019,120
Bobby,03-08-2019,200
使用df = pd.read_csv('test.csv', index_col=None, header='infer')
我将 test.csv 加载到 DataFrame 中,它产生:
Name Date Weight
0 Jonny 03-08-2019 100
1 Sally 03-08-2019 120
2 Bobby 03-08-2019 200
然后我创建了一个函数来删除用户选择的行。但我通过在所选行拆分 DataFrame 然后将 2 个 DataFrame 重新附加在一起来做到这一点。有没有更简单的方法来做到这一点?我查看了 df.drop() 但无法删除整行。
def delete_entry(df):
num_to_delete = int(input("Delete which row? "))
first_rows_to_keep = df.iloc[:num_to_delete]
last_rows_to_keep = df.iloc[num_to_delete+1:]
new_df = first_rows_to_keep.append(last_rows_to_keep)
with open('test.csv', 'w') as f:
new_df.to_csv(f, index=False)
寻找改进我的代码的方法。谢谢!
解决方案
您可以使用.drop()
pandas df 的方法,使用适当的参数将指定的行放置到位。
例如,要删除给定的行:
df.drop(num_to_delete, axis=0, inplace=True)
其中第二个参数('axis')表示删除行(与列相反),最后一个参数指定要执行的操作。
你也可以考虑看看.set_index
方法。例如,这将使您能够根据给定列的值删除行(即删除名称为 Bobby 的每个人)。
推荐阅读
- windows - 使用 WMI 命令的 lastlogon 时间戳之间的时区差异
- java - 如何使用 StringTokenizer 类
- ios - iOS(Swift)在初始化后更改 CAEmitterCell 的属性
- ajax - 在 ASP.Net Core 中将不记名令牌添加到 ajax POST 请求
- php - php命令行中的js
- php - Angularjs 表单操作并返回错误
- symfony4 - 无效的 YAML Symfony4
- java - 使用 Java (netbeans) 连接到远程 SQL 服务器时出现 SSL 错误
- javascript - 带有 html 代码和打印方法的对象
- c# - 不能简单地遍历列表以匹配密码(c#winform)