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

Python 在添加列值后将所有数据转换为NaN,python,pandas,nan,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.578

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

我正在处理的数据示例:

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个字符串组成的数组,用作此数据帧中每个列的标题。使用指定的标题只选择该列,即printdf['z']只打印该列,但数据框中的所有数据显示良好,即准确显示上述采样线,并在未指定列时正确检测列,当我从字符串数组中指定列标题时,突然变为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指定“columns”参数的情况下,数据会正确打印?在指定参数后,所有内容都显示为NaN

任何帮助都将不胜感激


-paanvaannd

您正在传递使用时创建的数据帧。将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返回一个数据帧,因此上面的行应该处理整个导入,即对pd.read_csv的结果调用pd.DataFrame是多余的。header=None表示熊猫不应将CSV的第一行解释为头,然后名称=。。。允许您指定要使用的列名。delim_不应该使用空格,因为逗号而不是空格似乎是数据中的分隔符。毕竟,“逗号”是“csv”中的“c”。事实上,如果不测试您的数据,我会说delim_空格的使用是NaN值背后最有可能的罪魁祸首。

谢谢您的帮助!这是有道理的。不过,对建议代码的一个更正是:read_csv不接受“data”参数,它只是df=pd。read_csv“file_name”,delim_whitespace=True。我还使用@cmaher更简洁的指定“name”的版本,而不是在单独的一行中添加列。这只是一种风格,也能达到同样的效果,对吗?调用函数时,是否有理由将命令拆分为指定命令?不客气!如果是您使用的答案,请接受此答案:已接受:+至于我在回复中对@James提出的问题:是否有任何理由选择使用df.columns而不是指定names参数?P.s.分隔符实际上是数据文件中的空白,没有逗号。我应该使用另一个Pandas函数来读取数据文件吗?使用pd.read_csv可以很好地工作,虽然它不是一个csv文件,它只是带有制表符分隔的纯文本,我认为在将delim_空白设置为“True”并且没有将数据帧读入数据帧之后,哈哈!df.columns vs.names实际上只是偏好的问题;在某些情况下,df.columns的可读性可能更高,例如,如果有许多其他参数被传递到read_csv,或者如果列名列表很长。如果可能的话,我个人总是使用名称。不,read_csv应该可以-它实际上非常能够从各种格式推断数据结构。在手动指定分隔符之前,我经常尝试让read_csv解析数据一次,除非我确定它会导致问题。read_csv是read_table的一个专门版本,可以对其进行调整以读取更广泛的格式-查看文档,您将看到: