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

Pandas converting all data to NaN after adding column values

我正在尝试将列 header 添加到以下数据集。根据项目规范,我不能简单地修改文件以手动添加那些 header。

我正在处理的数据示例:

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 中每一列的 header。使用指定的 header 只 select 那一列(即 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)

以上代码的示例输出(应该准确显示上面的示例数据,但添加了列 headers):

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的'columns'参数,指定参数后数据会正常打印wheras,一切都显示为NaN?

如有任何帮助,我们将不胜感激!

-- paanvaannd

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

试试这个:

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

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

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

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