如何使用熊猫解析 CSV 文件?

Posted

技术标签:

【中文标题】如何使用熊猫解析 CSV 文件?【英文标题】:How to parse CSV file using pandas? 【发布时间】:2016-02-07 00:21:15 【问题描述】:

现在我有一个 .csv 文件,其中有一列时间,例如“20140203 00:00:03.132”,如何有效地删除秒部分(“:03.132”)?数据量很大,我试过用sed对数据进行预处理,但是太慢了!

我现在正在尝试在 pandas 中解析 .csv 文件。无论如何我可以有效地处理这个问题吗?也欢迎使用 pandas 以外的方法!

【问题讨论】:

如果你没有集群来执行操作,那么你尝试的任何事情都会很慢,因为它会在一台机器上完成 pandas 可能不是最快的方法...afaik,它只是使用标准的 csv 模块,并进行了额外的处理,包括尝试将所有内容强制转换为数据类型;字符串操作更快,因此仅使用迭代 csv 阅读器会更快。我们在谈论多少数据? 【参考方案1】:

有一个方便的时间戳解析库:datetime:

import datetime
x = '20140203 00:00:03.132'
timestamp = datetime.datetime.strptime(x, '%Y%m%d %H:%M:%S.%f')
print datetime.datetime.strftime(timestamp, '%Y%m%d %H:%M')  # 20140203 00:00

或者由于处理大量数据有点慢,你可以从第一个:的右边拆分,然后取结果列表的第一个元素:

print x.rsplit(':', 1)[0]  # 20140203 00:00

【讨论】:

我试过了,但考虑到大量数据,速度很慢。 @xxx222 够公平的。您可以像 print x.rsplit(':', 1)[0] 这样在最后一个 : 上拆分字符串,这将产生相同的结果,这将是一个快速的操作。【参考方案2】:

看看date_parser参数到pandas.read_csv()。类似这样的东西应该可以工作:

import dateutil
from pandas import read_csv

def my_date_parser(seq):
    return [dateutil.parser.parse(s[:14]) for s in seq]

csv = read_csv('file.csv', parse_dates=[3], date_parser=my_date_parser)

您可能还需要提供参数parse_dates 来确定包含日期字符串的列,例如上面将第 3 列指定为日期列。

【讨论】:

以上是关于如何使用熊猫解析 CSV 文件?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何使用熊猫读取没有“未命名”行的 csv 文件? [复制]

如何使用代理上的熊猫从 url 读取_csv 文件?

如何使用熊猫在特定列中的csv文件中查找特定单词

如何将熊猫数据添加到现有的 csv 文件中?

如何使用熊猫读取共享文件夹中的csv文件?

如何请求一个 zip 文件,提取它,然后从 csv 文件创建熊猫数据框?