这是我第一次研究熊猫,请原谅我的无知。 我的需求是从S3下载一个文件到Ec2上,并将dat文件放到一个数据帧上。这就是我的输入文件数据的外观
1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFillerÇ
1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ
1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFillerÇ
1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFillerÇ
1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFillerÇ
1Ç74Ç99991Ç4364Ç5555Ç0Ç0Ç1ÇEEÇ014ÇFillerÇ
由于数据似乎没有任何编码,所以我决定使用带分隔符的read_Csv作为cedilla并存储在dataframe中。在
^{pr2}$但由于某些原因,它没有识别出相同的数据,并将数据放在一列中。在
0
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012ÇFi...
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011ÇFi...
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011ÇFi...
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014ÇFi...
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011ÇFi...
该文件看起来像ASCII而不是编码的。我确实尝试过使用UTF-8和UTF-16编码,并将Unicode值作为分隔符,但这不起作用。 我还尝试将分隔符硬编码为'F'而不是cedilla,并运行代码,认为文件本身可能有一些加密/编码。但事实并非如此,我的输出由'F'分隔。在
分隔符为“F”。在
0 1
0 1Ç70Ç23929Ç4341Ç1111Ç0Ç0Ç1ÇAAÇ012Ç illerÇ
1 1Ç75Ç45555Ç4324Ç2222Ç0Ç0Ç1ÇAAÇ011Ç illerÇ
2 1Ç76Ç23957Ç4334Ç3333Ç0Ç0Ç1ÇAAÇ011Ç illerÇ
3 1Ç72Ç47776Ç4344Ç4444Ç0Ç0Ç1ÇABÇ014Ç illerÇ
4 1Ç73Ç88880Ç4354Ç4444Ç0Ç0Ç1ÇCDÇ011Ç illerÇ
我正在加载的文件通常是一个很大的文件,这个文件运行很长时间。所以我不确定我是否使用codec将文件编码为UTF-8,然后放入dataframe是一个明智的选择。在
我试图手动创建一个以cedilla分隔的文件,当通过同一个命令时,它工作得很好。我不知道这里出了什么问题。有没有办法弄清楚它是否被编码了?在
如有任何建议,我们将不胜感激。在
谢谢, VB语言
采纳了埃德丘姆的建议,我使用了以下方法
#file location
dataPath = "C:/Users/Documents/Pytest/"
itextfile = join(dataPath,'sample.dat')
fb = open(itextfile, 'r')
data = fb.read()
print(data)
tf=pandas.read_csv(StringIO(data), sep='Ç', header=None)
#tf=pandas.read_csv(StringIO(data), sep='\Ç', header=None)
print(tf)
就像是从下面的文件里出来的一样
1Ç71Ç23929Ç44Ç5685Ç0Ç0Ç1ÇaaÇ012ÇFillerÇ
1Ç72Ç23953Ç40Ç3319Ç0Ç0Ç1ÇbbÇ011ÇFillerÇ
1Ç73Ç23957Ç43Ç7323Ç0Ç0Ç1ÇccÇ011ÇFillerÇ
1Ç74Ç24006Ç41Ç6938Ç0Ç0Ç1ÇbbÇ014ÇFillerÇ
1Ç75Ç24140Ç45Ç0518Ç0Ç0Ç1ÇddÇ011ÇFillerÇ
Output
0 1 2 3 4 5 6 7 8 9 10 11
0 1 71 23929 44 5685 0 0 1 aa 12 Filler NaN
1 1 72 23953 40 3319 0 0 1 bb 11 Filler NaN
2 1 73 23957 43 7323 0 0 1 cc 11 Filler NaN
所以使用sep='Ç'代替sep='\chp'起作用了。不知道为什么我运行脚本时会出现这种情况,因为肉眼(当我打开样品.dat文件)显示为用符号分隔。在
有没有一种方法可以在不从外部读取文本文件的情况下传递到熊猫.read_csv(命令)StringIO? 我这么问是因为我想限制我读取并放入数据帧的行数。假设我只想拥有前几行,我添加了Totrows,而最后几行我使用了skiprows。这样处理包含数百万行的巨大文件所需的时间最少。若这不可能,我将使用for循环。只是想看看是否有办法不使用for循环。在
谢谢,VB
尝试传递
sep='\Ç'
,因为这对我有效:作为标准做法,您可能希望使用codecs包打开您的文档。这将允许您指定编码(在大多数情况下是UTF-16),而codecs包似乎非常擅长对诸如行结束符和编码之类的内容进行解码。在
Reading tab-delimited file with Pandas - works on Windows, but not on Mac
相关问题 更多 >
编程相关推荐