大块数据,试图替换一列中的分隔符但不是所有分隔符

Large chunk of data, trying to replace delimiter character in one column but not all delimiter characters

我正在尝试使用 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 with sep='₩' and then use str.split 和参数 n=7 创建 DataFrame,因为您只需要按第一个 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