熊猫-如何将数据框转换为新数据类型,但忽略标题/第一行

时间:2018-07-19 12:33:27

标签: python pandas

我正在尝试将数据帧转换为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。 谢谢

2 个答案:

答案 0 :(得分:0)

如果您的数据为int类型,那么做到这一点的一种真正愚蠢的方法是

file_float = file + 0.0

答案 1 :(得分:0)

据我了解,您有一个充满数字的数据框,但第一行包含字符串。有几种方法可以解决此问题。首先,例如,通过使用header中的skiprowspd.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)