gpt4 book ai didi

python - 使用 python 和 pandas 将错误创建的大型 csv 文件转换为制表符分隔文件

转载 作者:行者123 更新时间:2023-11-30 22:44:29 26 4
gpt4 key购买 nike

我有一个非常大的 csv 文件(>3GB,> 7500 万行)。问题是,它不应该创建为 csv,而应该创建为制表符分隔。该文件有两列:一个字符串和一个整数。但是,字符串可以有逗号(例如:“是的,它非常好”),所以,现在文件可能看起来像这样,并且它没有一致的列数,我无法使用 pandas read_csv 读取它。

STRING                    CODE      
This is nice 1
That is also nice 2
Yes it is very nice 3
I love everything 4

我试图通过将最后一个逗号更改为制表符来将其转换为制表符分隔文件。由于文件很大,我无法将其读入内存。这就是我尝试过的。我分块读取文件:

for ch in pandas.read_table("path", chunksize=256)

我定义了一个函数 myfunc,如下所示:

li = s.rsplit(",", 1)
ret = "\t".join(li)
ret.rsplit("\t", 1)

现在,对于每个 block 我都会执行以下操作:

data["STRING,CODE"] = data["STRING,CODE"].map(lambda x: x.myfunc(x))
data.to_csv("tmp.csv", sep="\t")

我得到类似的东西:

     STRING                                 CODE
0 "This is nice 1
1 "That is also nice
2 "Yes it is very nice 3"
3 "I love everything 4"

这和我想要的完全不一样。这些条目没有按照我想要的方式分隔,我得到了额外的索引和额外的引号。此外,即使我能够修复这一 block ,我也需要返回并附加到 csv 文件以重新创建整个文件。抱歉,这很困惑,但我迷路了。有什么帮助吗?

文件:

STRING,CODE
This is nice,1
That is also nice,2
Yes,it is very nice,3
I love everything,4

最佳答案

你不应该在这里需要 Pandas 。只需迭代文件的行并将固定行写入新文件即可。

with open('new.csv', 'w') as newcsv:
with open('file.csv') as csvf:
for line in csvf:
head, _, tail = line.strip().rpartition(',')
newcsv.write('{}\t{}\n'.format(head, tail))

这应该可以完成工作。

关于python - 使用 python 和 pandas 将错误创建的大型 csv 文件转换为制表符分隔文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513726/

26 4 0
文章推荐: mysql - 创建存储过程 - SQL
文章推荐: c# - 如何将未知数量的参数传递给 C# 中的 sql 查询?
文章推荐: c# - 强制 MySQL Connector.NET 返回一个 bool 值
文章推荐: c# - 如何在