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

标签 python pandas csv dataset large-data

我正在尝试使用 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/

相关文章:

r - 使用带逗号的不带引号的字符串导入 csv;对于每一行-忽略每第三个逗号?

python - 如何在Python中识别维基百科类别

python - 使用Python读取矩阵文件(mtx): not enough values to unpack

python - 合并组内连续的记录

postgresql - 从 CSV 填充 postgres 表列时出现非空约束错误

perl - 为什么 DBD::CSV 提示 "Loose unescaped quote"?

python - 窗口框架中的标签不会拉伸(stretch),为什么?

Python在未来五分钟创建unix时间戳

python - 重采样时,如果源区间中有一些 NaN 值,则将 NaN 放入结果值中

python - Pandas to_sql 索引从 1 开始