pandas中的.dat文件导入

时间:2018-05-31 16:28:37

标签: python python-3.x pandas dataframe

我想使用pandas导入这个公开的file。就像csv(我已经简单地将.dat重命名为.csv):

clinton = pd.read_csv("C:/Users/Mateusz/Downloads/ML_DS-20180523T193457Z-001/ML_DS/clinton1.csv")

但在某些情况下,国家/地区名称由两个单词组成,而不仅仅是一个单词。在这些情况下,我的数据框向右移动。这看起来像(名称温泉分为两列):enter image description here如何一次修复整个数据集?

2 个答案:

答案 0 :(得分:4)

无需将.dat重命名为.csv。相反,您可以使用匹配两个或多个空格的正则表达式作为列分隔符。

尝试使用sep参数:

pd.read_csv('http://users.stat.ufl.edu/~winner/data/clinton1.dat',
            header=None, sep='\s\s+', engine='python')

输出:

            0      1     2      3      4     5      6      7     8     9    10
0  Autauga, AL  30.92  31.7  57623  15768  15.2  10.74  51.41  60.4  2.36  457
1  Baldwin, AL  26.24  35.5  84935  16954  13.6   9.73  51.34  66.5  5.40  282
2  Barbour, AL  46.36  32.8  83656  15532  25.0   8.82  53.03  28.8  7.02   47
3   Blount, AL  32.92  34.5  61249  14820  15.0   9.67  51.15  62.4  2.36  185
4  Bullock, AL  67.67  31.7  75725  11120  33.0   7.08  50.76  17.6  2.91  141

如果你想把你的州作为一个单独的列,你可以使用这个sep ='\ s \ s + |,',这意味着在两个空格或更多空格上的单独列或逗号。

pd.read_csv('http://users.stat.ufl.edu/~winner/data/clinton1.dat',
            header=None, sep='\s\s+|,', engine='python')

输出:

        0    1      2     3      4        5     6      7      8     9     10     11
0  Autauga   AL  30.92  31.7  57623  15768.0  15.2  10.74  51.41  60.4  2.36  457.0
1  Baldwin   AL  26.24  35.5  84935  16954.0  13.6   9.73  51.34  66.5  5.40  282.0
2  Barbour   AL  46.36  32.8  83656  15532.0  25.0   8.82  53.03  28.8  7.02   47.0
3   Blount   AL  32.92  34.5  61249  14820.0  15.0   9.67  51.15  62.4  2.36  185.0
4  Bullock   AL  67.67  31.7  75725  11120.0  33.0   7.08  50.76  17.6  2.91  141.0

答案 1 :(得分:0)

您可以使用正则表达式作为分隔符。在您的特定情况下,所有分隔符都不止一个空格,而名称中的空格只是单个空格。

import pandas as pd

clinton = pd.read_csv("clinton1.csv", sep='\s{2,}', header=None, engine='python')