删除pandas数据帧中特定字符后的值

时间:2018-03-27 12:32:34

标签: python pandas dataframe split

我正在使用pandas数据帧,我想在空格发生后删除所有信息。我的数据框与此类似:

import pandas as pd
d = {'Australia' : pd.Series([0,'1980 (F)\n\n1957 (T)\n\n',1991], index=['Australia', 'Belgium', 'France']),
     'Belgium' : pd.Series([1980,0,1992], index=['Australia','Belgium', 'France']),
    'France' : pd.Series([1991,1992,0], index=['Australia','Belgium', 'France'])}
df = pd.DataFrame(d, dtype='str')

df

我可以删除一个特定列的值,但split()函数不适用于整个数据帧。

f = lambda x: x["Australia"].split(" ")[0]
df = df.apply(f, axis=1)

任何人都知道如何在数据框中的每个值出现空格后删除信息?

3 个答案:

答案 0 :(得分:1)

让我们尝试使用assign,因为此数据框中的列名称“井井有条”,意味着不包含空格或特殊字符:

df.assign(Australia=df.Australia.str.split().str[0])

输出:

          Australia Belgium France
Australia         0    1980   1991
Belgium        1980       0   1992
France         1991    1992      0

如果您的所有列数据类型都是字符串,则可以使用apply和lamda函数:

df.apply(lambda x: x.str.split().str[0])

或者,如果您有数字和字符串dtypes的混合,那么您可以select_dtypes使用assign,如下所示:

df.assign(**df.select_dtypes(exclude=np.number).apply(lambda x: x.str.split().str[0]))

答案 1 :(得分:1)

我认为需要将所有列转换为string s然后应用split函数:

df = df.astype(str).apply(lambda x: x.str.split().str[0])

另一种解决方案:

df = df.astype(str).applymap(lambda x: x.split()[0])

print (df)
          Australia Belgium France
Australia         0    1980   1991
Belgium        1980       0   1992
France         1991    1992      0

答案 2 :(得分:0)

您可以遍历所有列并在下面应用:

for column in df:

    df[column] = df[column].str.split().str[0]