Pandas在添加列值后将所有数据转换为NaN

时间:2017-02-11 03:32:59

标签: python pandas nan

我正在尝试将列标题添加到以下数据集中。根据项目的规格,我不能简单地修改文件来手动添加这些标题。

我正在使用的数据示例:

38.049133   0.224026 0.05398  -19.11 -20.03
38.352526   0.212491 0.05378  -18.35 -19.19
38.363598   0.210654 0.05401  -20.11 -20.89
54.936819   0.216794 0.20114  -20.94 -21.88
54.534881   0.578615 0.12887  -19.75 -20.66
54.743075   0.508774 0.18331  -20.54 -21.53
54.867240   0.562636 0.13956  -19.95 -20.85
54.856908   0.544031 0.13938  -20.14 -21.03
54.977748   0.501912 0.13923  -20.27 -21.01
54.992762   0.460376 0.12723  -20.24 -20.83 

我创建了一个包含5个字符串的数组,作为此DataFrame中每个列的标题。使用指定的标题确实只选择该列(即print(df['z'])只打印那一列(据称),但只显示DataFrame中的所有数据,显示正常(即显示上面的样本行并检测列)当我没有指定列时,突然变成" NaN"当我从字符串数组中指定列标题时。

我的代码示例:

... imports and whatnot not shown

dataColumns = ['RA', 'DEC', 'z', 'M(g)', 'M(r)']
dataFile = pd.read_csv(data = 'file_name', delim_whitespace = True)
df = pd.DataFrame(data = dataFile, columns = dataColumns)

print(df)

上述代码的示例输出(它应该显示上面的示例数据,但添加了列标题):

RA   DEC z  M(g) M(r)
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN
NaN   NaN NaN  NaN NaN

为什么没有指定'列' DataFrame的参数,数据将在指定参数后正确打印,一切显示为NaN?

任何帮助将不胜感激!

- paanvaannd

2 个答案:

答案 0 :(得分:1)

要解决您的问题,请改用此行:

df = pd.read_csv('file_name', header=None, names=dataColumns)

pd.read_csv会返回一个DataFrame,因此上面的行应该处理整个导入(即pd.DataFrame的结果调用pd.read_csv是多余的)。 header=None表示pandas不应将CSV的第一行解释为标题,然后names=...允许您指定要使用的列名。不应使用delim_whitespace,因为逗号(而不是空格)似乎是数据中的分隔符(毕竟“逗号”是“csv”中的“c”)。事实上,在没有测试数据的情况下,我会说使用delim_whitespace是NaN值背后最可能的罪魁祸首。

答案 1 :(得分:0)

您正在将使用.read_csv时创建的数据框传递给数据框构造函数pd.DataFrame。我真的很惊讶它没有抛出错误。

试试这个:

df = pd.read_csv(data = 'file_name', delim_whitespace = True)
df.columns = dataColumns