我正在尝试将数据帧转换为float类型,以便可以对其进行一些计算。但是我有一个包含字符串的标题/第一行,因此当我尝试将其转换为浮点型时会出现此错误:
ValueError: could not convert string to float: 'column1'
我尝试过:
file_float = file.astype(float)
并尝试过分别转换列:
file['column1'] = file.column1.astype(float)
file['column2'] = file.column2.astype(float)
但是它们都具有相同的错误。所以我需要一种将列转换为float类型并忽略第一行的方法,因为它包含column1和column2,因此无法转换为float。 谢谢
答案 0 :(得分:0)
如果您的数据为int类型,那么做到这一点的一种真正愚蠢的方法是
file_float = file + 0.0
答案 1 :(得分:0)
据我了解,您有一个充满数字的数据框,但第一行包含字符串。有几种方法可以解决此问题。首先,例如,通过使用header
中的skiprows
或pd.read_csv
自变量或用于读取数据的任何方法,您可以以不同的方式读取数据。>
但是考虑到您现在所处的情况,这是您可以做的。我创建了一个迷你示例数据框(下次您提问题时也应这样做,因为它有助于回答问题的人。)
import pandas as pd
df = pd.DataFrame({'col1':['header1', 2, 3], 'col2':['header2', 5, 6]})
col1 col2
0 header1 header2
1 2 5
2 3 6
我认为您可能希望保留标题作为列的名称。如果不这样做,请跳过下一个代码段。
df.columns = df.iloc[:1].values.tolist()[0]
header1 header2
0 header1 header2
1 2 5
2 3 6
最后,有两种方法可以摆脱该行。任一种都可以工作(不要同时使用两者,否则会丢失两行):
df.drop(df.head(1).index, inplace=True)
df = df.iloc[1:]
现在您可以使用将数据框转换为浮点数:
df = df.astype(float)
header1 header2
1 2.0 5.0
2 3.0 6.0
编辑: 如果问题不是第一行(而是一些未知的字符串行),请尝试以下操作:
for col in df.columns:
df[col] = pd.to_numeric(df[col], errors='force')
最后要摆脱缺失值(在字符串所在的位置创建),您可以执行以下操作:
df.dropna(inplace=True)