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 值背后最有可能的罪魁祸首。
我正在尝试将列 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 值背后最有可能的罪魁祸首。