如何用0替换空单元格并在pandas数据框中尽可能将字符串更改为整数?

时间:2016-11-10 15:29:13

标签: python pandas

我有一个包含3000多列的数据框。数据框中的许多单元格都是空字符串('')。此外,我有很多数字值是字符串,但实际上应该是整数。我写了两个函数用0填充所有空单元格,并在可能的情况下将值更改为整数,但是当我运行它们时,我的数据帧没有任何变化。功能:

def recode_empty_cells(dataframe, list_of_columns):

    for column in list_of_columns:
        dataframe[column].replace(r'\s+', np.nan, regex=True)
        dataframe[column].fillna(0)

    return dataframe

def change_string_to_int(dataframe, list_of_columns):

    dataframe = recode_empty_cells(dataframe, list_of_columns)

    for column in list_of_columns:
        try:
            dataframe[column] = dataframe[column].astype(int)
        except ValueError:
            pass

    return dataframe

注意:我正在使用try / except语句,因为某些列包含某种形式的文本。在此先感谢您的帮助。

编辑:

感谢您的帮助,我得到了第一部分工作。现在所有空单元都有0。这是我目前的代码:

def recode_empty_cells(dataframe, list_of_columns):

    for column in list_of_columns:
        dataframe[column] = dataframe[column].replace(r'\s+', 0, regex=True)

    return dataframe

def change_string_to_int(dataframe, list_of_columns):

    dataframe = recode_empty_cells(dataframe, list_of_columns)

    for column in list_of_columns:
        try:
            dataframe[column] = dataframe[column].astype(int)
        except ValueError:
            pass

    return dataframe

但是,这会给我以下错误:OverflowError: Python int too large to convert to C long

2 个答案:

答案 0 :(得分:9)

您没有在功能中保存更改:

foo.split("").filter(c => specialchars.indexOf(c.charCodeAt()) != -1).length != 0

答案 1 :(得分:4)

考虑df

df = pd.DataFrame(dict(A=['2', 'hello'], B=['', '3']))
df

enter image description here

apply

def convert_fill(df):
    return df.stack().apply(pd.to_numeric, errors='ignore').fillna(0).unstack()

convert_fill(df)

enter image description here