我正在尝试使用 Pandas 分析一个数据集(200mb,约 300 万行),但该数据集包含一个由随机用户填充的列,其中允许所有字符。这会产生一个问题,即分隔符 (\t) 也经常出现在最后一列中。在 GVIM 中,我尝试搜索所有 '\t' 并将其替换为 ':',但这也替换了实际的分隔符(GVIM 中未显示)。有没有人有关于如何专门替换大型数据集中特定列中的字符的提示?
例如我的文件使用制表符 (\t) 作为其列的分隔符。但是,有一行包含以下信息:
137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
这弄乱了我的 Pandas 笔记本,因为它需要 8 个字段,但由于\和 CA 之间的制表符而得到 9 个。第 8 列是唯一可以实际填写您自己的选项卡的地方。那么,如何仅更改第八列中的“\t”呢?
提前致谢!
请注意,我对 Python 脚本编写的经验为零,我认为这可以解决它,但是比学习 Python 更快的方法会更好。
最佳答案
我认为您可以先通过 read_csv
创建 DataFrame使用 sep='₩'
然后使用 str.split
使用参数 n=7
,因为您只需要按前 7
分隔符拆分:
import pandas as pd
import io
temp=u"""137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA"""
#after testing replace io.StringIO(temp) to Location
df = pd.read_csv(io.StringIO(temp), sep="₩", header=None, names=['data'], encoding='Latin-1')
with pd.option_context('display.max_colwidth', -1):
print df
data
0 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
1 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
2 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA
print df.data.str.split('\t',n=7).apply(pd.Series)
0 1 2 3 4 5 6 \
0 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT
1 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT
2 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT
3 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT
7
0 Oakland,\CA
1 Oakland,\CA
2 Oakland,\\tCA
3 Oakland
关于python - 大块数据,试图替换一列中的分隔符但不是所有分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36548203/