如何将字符串转换为整数pandas

时间:2017-12-21 14:47:06

标签: python pandas split

我有很多列的数据集。 我想通过将他们与' Club'

分组来获取每列的平均值

我的数据采用字符串形式,部分数据采用表格形式 ' 60 + 2'或者' 58-1'

我想将此字符串数据类型转换为整数,以便我可以使用它们 计算平均值。

因为我已经搜索过,需要重新跳过' +& - &#39 ;. .str.split用于分割字符串。

在我的情况下,pd.to_numeric将无法正常工作,因为我想立即编辑批量列

    complete_dataset is dataframe

    cols = [i for i in complete_dataset.columns if i not in ['Name','Club', 'Nationality', 'Age', 'Overall', 'Potential', 'Special']]
    for col in cols:
        col = complete_dataset[col] #.str.split('+').astype(int)
        print(col)
        for x in col:
            value = x
            print(value)
    #     df[col]=pd.to_numeric(df[col])

这是输出

    Name: Acceleration, dtype: object
    89
    92-4
    94
    88-6
    58+2
    79
    70+9
    76
    94

此外,我想将此数据用于进一步的计算

谢谢

2 个答案:

答案 0 :(得分:2)

由于您使用了Pandas,我建议使用pandas.eval()代替Python的eval()方法,正如Coldspeed正确指出的那样(谢谢!)。

使用pandas.eval()的优点是它只评估Python表达式而不是Python语句,因此更加安全,与ast.literal_eval()方法(link to the documentation)相比也应该运行一点有点快。

具体而言,您可以修改代码以执行以下操作:

import pandas

# Your code to read in the DataFrame goes in here.

complete_dataset['Acceleration'] = pandas.eval(complete_dataset['Acceleration'])

这将评估存储在df中名为Acceleration的列中的所有表达式。该方法应该执行得更快,输出将是整数或浮点数,具体取决于存储在列中的表达式。

有关详细信息,请查看Pandas documentation

答案 1 :(得分:2)

  

我想删除符号并按符号添加或减去数字   并将字符串转换为整数。

ast.literal_eval

好吧,这样做的一个好方法是使用python的安全评估 - ast.literal_eval

import ast

df.Acceleration = df.Acceleration.apply(ast.literal_eval)
df

   Acceleration
0            89
1            88
2            94
3            82
4            60
5            79
6            79
7            76
8            94

df.Acceleration.dtype
dtype('int64')

literal_eval仅评估某些字符串表达式。假设您有一列包含可以计算的表达式的字符串,这将评估它们并返回数值结果。

请注意,如果您有一个混合整数和字符串列,最简单的方法是将整个列转换为字符串并应用literal_eval

df['Acceleration'] = df.Acceleration.astype(str).apply(ast.literal_eval)

pd.eval / df.eval

另一个好方法是使用pandas'安全评估 - pd.Series.eval,如this answer所述。

df.Acceleration = df.eval(df.Acceleration)
df

   Acceleration
0            89
1            88
2            94
3            82
4            60
5            79
6            79
7            76
8            94

处理格式错误的数据

如果您的数据包含无效字符串,则需要稍微不同的解决方案,因为上面提到的所有内容都将失败。我们需要定义一个相应处理这些错误的函数。

def parse(x):
    try:
        return ast.literal_eval(x) # pd.eval(x)
    except ValueError:
        return np.nan

df.Acceleration = df.Acceleration.apply(parse)
df

   Acceleration
0            89
1            88
2            94
3            82
4            60
5            79
6            79
7            76
8            94