介绍

  • 曾几何时,我有机会创建一个批处理,它使用 API 从服务器获取 CSV 文件并将编辑后的版本加载到我的服务中。当时我想将其保留为执行日志。
  • 我认为读取 CSV 文件并对其进行修改对于 Web 应用程序开发和机器学习来说都是一样的。我希望它可以帮助其他人。

安装熊猫

安装
% pip install pandas
% pip list | grep pandas #バージョン
pandas             1.5.1

1.读取CSV文件

import pandas as pd

file = PATH #取得したいファイルのPATH
df = pd.read_csv(file, encoding = "utf-8") #encodingは案件によって変えてください

这次我将适当地创建一个df

创建 df
df = pd.DataFrame({'name': ["tanaka taro", "yamamoto taro", "ota taro"], 'zipcode': ['111-1111', '222-2222', '333-3333'], 'school': ['新潟大', '新潟大', '千葉大']})
print(df)
#         name     zipcode     school
#0    tanaka taro  111-1111    新潟大
#1  yamamoto taro  222-2222    新潟大
#2       ota taro  333-3333    千葉大

2. 编辑

2.1 当您想将一列分成两列时。

在这里,写将name分为firstname和lastname的过程。

df[["lastname","firstname"]] = df["name"].str.split(' ', expand=True)
print(df)

#        name         zipcode        school  lastname firstname
#0    tanaka taro  111-1111    新潟大    tanaka      taro
#1  yamamoto taro  222-2222    新潟大  yamamoto      taro
#2       ota taro  333-3333    千葉大       ota      taro

请注意,它是像df[['column1','column2']] 这样的列表中的列表。
如果只有一个列表,则该过程正在获取一列。
请注意会出现错误 raise ValueError( ValueError: Cannot set a DataFrame with multiple columns to the single column ('lastname', 'firstname')

这一次,我想用半角空格分隔,所以我使用了 str.split(' '),但请根据要分隔的字符进行更改。不要忘记expand=True

2.2 删除不必要的列

在 2.1 中创建的 df 中有一个 name 列。我们不再使用它,所以让我们删除它

df.drop(columns='name', inplace=True)
print(df)

#    zipcode school  lastname firstname
#0  111-1111    新潟大    tanaka      taro
#1  222-2222    新潟大  yamamoto      taro
#2  333-3333    千葉大       ota      taro

inplace=True 是一个选项,它使对 df 的更改成为非临时性的(立即更改目标)。

2.3 当您想从列中删除某些字符时

下一步是从邮政编码列中删除“-”(连字符)。
这也可以通过指定列并使用replace 轻松完成

df['zipcode'] = df['zipcode'].str.replace('-', '')
print(df)

#   zipcode school  lastname firstname
#0  1111111    新潟大    tanaka      taro
#1  2222222    新潟大  yamamoto      taro
#2  3333333    千葉大       ota      taro

2.4 从一列中提取值,不重复。

假设一列与另一列具有一对多关系。在这种情况下,name(姓名)在某处属于school(学校)。 name 属于school,所以同一个元素可以在school 列中出现多次。在这种情况下,新泻大学出现了两次。
还有一种情况是你想处理所谓的类父实体(这里是school)。那样的话,如果有重复的话,可能会有点麻烦,所以我会介绍一种方法,从某列中提取不重复的值。

那是unique()。您可以通过将其指定为 pd.Series.unique() 从该列中获取不重复的列表。

print(df["school"].unique())
#['新潟大' '千葉大']

将其与 itterrows()、itertuples() 等结合使用,您可以只处理唯一值。

最后输出为 CSV

最后,输出编辑后的 ​​CSV 文件并完成。

df.to_csv(path,index=False) #pathは自分の保存したい場所に指定してください。

我敢肯定还有其他编辑。首先,让我介绍一下我使用的东西。

参考文章


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632800.html

相关文章: