NaN值与分隔符相同 - 如何导入?

时间:2017-07-10 20:18:39

标签: python csv pandas import format

我正在尝试使用来自熊猫的read_csv将USDA的SR28营养数据导入python。

数据描述如下:

ASCII files are delimited. All fields are separated by carets (^) and text fields are
surrounded by tildes (~). A double caret (^^) or two carets and two tildes (~~) appear
when a field is null or blank.

我不知道如何处理双插入零点。许多行连续有五六个空白字段,导致' ^^^^^^^^^^'在我的行。我最终得到了太多的专栏,把桌子扔掉了。

到目前为止,我已经尝试过这个:

data = pd.read_csv('.../NUT_DATA.txt', sep="^", na_values=["~~","^^"], header=None)
print(data[0:3])

由此我得到了不正确的专栏突破。我对正则表达式不太熟悉,试图从分离器中排除双重插入符号,但即使这样,我也不知道如果胡萝卜是下一列的双重或分隔符的一部分,我将如何区分。< / p>

原始USDA数据样本:

~01001~^~268~^2999^0^^~4~^~NC~^~~^~~^^^^^^^~~^09/2015^
~01001~^~269~^0.06^0^^~4~^~NR~^~~^~~^^^^^^^~~^11/2002^
~01001~^~291~^0.0^0^^~4~^~~^~~^~~^^^^^^^~~^^
~01001~^~301~^24^17^0.789^~1~^~A~^~~^~~^7^19^30^4^22.021^26.496^~2, 3~^11/2002^
~01001~^~303~^0.02^18^0.011^~1~^~A~^~~^~~^7^0.00^0.15^7^-0.008^0.046^~2, 3~^03/2003^
~01001~^~304~^2^18^0.047^~1~^~A~^~~^~~^7^1^2^4^1.586^1.863^~2, 3~^03/2003^
~01001~^~305~^24^17^0.463^~1~^~A~^~~^~~^7^19^27^7^22.488^24.653^~2, 3~^03/2003^

1 个答案:

答案 0 :(得分:2)

使用fillna

pd.read_csv('.../NUT_DATA.txt', sep='^', quotechar='~', header=None).fillna('')

     0    1        2   3      4   5   6  7  8  9   10    11 12      13      14    15       16 17
0  1001  268  2999.00   0          4  NC                                              09/2015   
1  1001  269     0.06   0          4  NR                                              11/2002   
2  1001  291     0.00   0          4                                                            
3  1001  301    24.00  17  0.789   1   A        7  19    30  4  22.021  26.496  2, 3  11/2002   
4  1001  303     0.02  18  0.011   1   A        7   0  0.15  7  -0.008   0.046  2, 3  03/2003   
5  1001  304     2.00  18  0.047   1   A        7   1     2  4   1.586   1.863  2, 3  03/2003   
6  1001  305    24.00  17  0.463   1   A        7  19    27  7  22.488  24.653  2, 3  03/2003   

action如果您愿意

<Dial>