python - 如何从 CSV 文件中删除一些带有注释的行以将数据加载到 DataFrame?

标签 python csv pandas dataframe bigdata

有一个相对较大的包含数据的 CSV 文件(大约 80Mb)。当我在 MS Excel 中打开它时,我看到它包含 100 列和许多行数据。但是,第一行不是列名,而是一个 Web 链接。此外,最后两行是一些评论。 所以,现在我想将这些数据加载到 pandas DataFrame 中:

import pandas as pd
df = pd.read_csv('myfile.csv')

然后我想读取一个名为 Duration 的列(我看到它存在于 CSV 文件中)并从它的值中删除一个单词 years:

Duration = map(lambda x: float(x.rstrip('years')), df['Duration'])

它给我这个错误:

AttributeError: 'float' object has no attribute 'rstrip'

如果我在 MS Excel 中打开文件并删除第一行(网络链接)和最后两行(注释),那么代码就可以工作了!

那么,如何在 Python 中自动清理此 CSV 文件(以仅提取具有值的列)?

更新: 当我编写 print df.head() 时,它输出:

have mixed types. Specify dtype option on import or set low_memory=False.

我是否需要为所有 100 列指定类型?如果我不知道先验类型怎么办。

更新: 我无法附加文件,但作为示例,您可以检查 this one . 下载文件 2015-2016。

最佳答案

您应该使用 pd.read_csv() 中的一些参数:

df = pdread_csv('myfile.csv', skiprows=1, skip_footer=2)

我查看了您在评论中提供的链接并尝试导入它。我看到了两种混合数据类型(iddesc),所以我明确地为这两列设置了 dtype。此外,通过观察,页脚包含“总计”,因此我排除了以字母 T 开头的任何行。除标题外,有效行应以 id 列的整数开头。如果引入了其他不以 T 开头的页脚,这将在读取时抛出错误。

如果您先下载并解压zip文件,您可以进行如下操作:

file_loc = ...  # Specify location where you saved the unzipped file.
df = pd.read_csv(file_loc, skiprows=1, skip_blank_lines=True, 
                 dtype={'id': int, 'desc': str}, comment='T')

这将从 emp_length 列中删除 yearyears,尽管您仍然保留文本类别。

df['emp_length'] = df.emp_length.str.replace(r'( years|year)', '')

关于python - 如何从 CSV 文件中删除一些带有注释的行以将数据加载到 DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677603/

相关文章:

python - 如何判断手动渲染 Django 模板时是否存在渲染错误?

python - beautifulsoup 用于分离 &nbsp 和 ;在 html 标签内

python - 为什么我们需要 python 包装(例如 egg)?

java - 使用jsp以表格格式显示csv文件数据

python - 将字符串转换成

python - 如何以最佳(Pythonic)方式编写这段代码?

python以mm/dd/yyyy格式获取文件的时间戳

linux - 在 UNIX 中删除 CSV 文件中字段之间的空格

python - Plotly:始终显示悬停文本

python - 为什么我在 2017-03-12 的 12 点到凌晨 1 点之间的时间戳在 python 中得到 NonExistentTimeError