【问题标题】:Numbers appended to column names when reading CSV in pandas在熊猫中读取 CSV 时附加到列名的数字
【发布时间】:2022-01-16 12:26:19
【问题描述】:

我需要使用此链接https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv 打开文件,我需要使用 pandas 库来使用 numpy 确定此表中每一列的类型,并将生成的列类型写入单独的 csv 文件。

所以我写了代码

import pandas as pd
import csv

link = "https://archive.ics.uci.edu/ml/machine-learning-databases/00529/diabetes_data_upload.csv"
table = pd.read_csv(link, skiprows = [0])#skip first row

result = table.dtypes
print(result,'\nAll results has been saved to results.csv file')
result.to_csv('results.csv')

如果我打开 result.csv 我会得到下一个信息:

,0
40,int64
Male,object
No,object
Yes,object
No.1,object
Yes.1,object
No.2,object
No.3,object
No.4,object
Yes.2,object
No.5,object
Yes.3,object
No.6,object
Yes.4,object
Yes.5,object
Yes.6,object
Positive,object

但我预计输出应该是

40,int64
Male,object
No,object
Yes,object
No,object
Yes,object
No,object
No,object
No,object
Yes,object
No,object
Yes,object
No,object
Yes,object
Yes,object
Yes,object
Positive,object

很明显 ,0 - 这是因为在打开文件时我们得到一个 'id' 行 但是为什么我们得到的不仅仅是“No”,而是“No.2”? 谁能解释我做错了什么?

【问题讨论】:

  • 我认为附加数字是为了区分行值,因为它们不是唯一的。 Yes 可以属于其值中包含 Yes 的任何列。您可以应用文本处理层来删除数字。
  • 为什么在这里使用skiprows?您正在切断第一行,其中包含每列的标签。我认为您的 read_csv 调用应该类似于 table = pd.read_csv(link)

标签: python pandas csv


【解决方案1】:

后缀是由于pd.read_tablemangle_dupe_cols=True 选项,但您不能将值更改为False (ValueError: Setting mangle_dupe_cols=False is not supported yet)

所以,试试

names = dict(zip(table.columns, table.columns.str.split('.').str[0]))
table = table.rename(columns=names)
result = table.dtypes
result.to_csv('results.csv', header=False)

results.csv的内容:

40,int64
Male,object
No,object
Yes,object
No,object
Yes,object
No,object
No,object
No,object
Yes,object
No,object
Yes,object
No,object
Yes,object
Yes,object
Yes,object
Positive,object

【讨论】:

  • 看来OP也想从No.2中删除.2
  • @DrShams。现在解决你的问题了吗?
  • 所以,这是由于重复的值。感谢您的更新!
猜你喜欢
  • 2017-05-09
  • 2018-07-18
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2014-01-14
  • 2020-10-01
  • 2020-05-21
相关资源
最近更新 更多