如何使用pandas(Python)删除列中单元格的部分内容

如何使用pandas(Python)删除列中单元格的部分内容,python,pandas,unicode,Python,Pandas,Unicode,因此,我试图逐个单元格编辑整个列,将包含整数和字符串的列更改为仅包含整数组件。比如说 一个单元格看起来像: 3001234; textTEXT TextTeXTExt.TExt 我正在使用此命令: df2.columns[3] = df2.columns[3].map(lambda x: x.lstrip([5:])) 我也试过这样的方法: df2.columns[3] = df2.columns[3].split([]) 这是我从ipython得到的错误: AttributeError:

因此,我试图逐个单元格编辑整个列,将包含整数和字符串的列更改为仅包含整数组件。比如说

一个单元格看起来像:

3001234; textTEXT TextTeXTExt.TExt
我正在使用此命令:

df2.columns[3] = df2.columns[3].map(lambda x: x.lstrip([5:]))
我也试过这样的方法:

df2.columns[3] = df2.columns[3].split([])
这是我从ipython得到的错误:

AttributeError: 'unicode' object has no attribute 'map'
数据框中的实际列:

0                           11212; xxxxxxxxxx xxxxxxxx   
1                           11212; xxxxxxxxxx xxxxxxxx   
2                           11212; xxxxxxxxxx xxxxxxxx   
3                           11212; xxxxxxxxxx xxxxxxxx     
8                  667788; xxxxxxx xxxxxxxxxxxxx xxxxxx   
9                  55555; xxxxxxx xxxxxxxxxxxxx xxxxxx   
10                 55555; xxxxxxx xxxxxxxxxxxxx xxxxxx   
11                 55555; xxxxxxx xxxxxxxxxxxxx xxxxxx   
12                 33333; xxxxxxx xxxxxxxxxxxxx xxxxxx   
13                 333; xxx xxxxx @ xxx xxx 2 xxxx   
14                 9991; xxxx; xxxxxx xxxxx xxxx @ 2 xxx   
18                       1635; vvvvvvvvvvvv vvvvvv 10   
19                       1635; vvvvvvvvvvvv vvvvvv 10   
20                       1635; vvvvvvvvvvvv vvvvvv 10   
21                       1635; vvvvvvvvvvvv vvvvvv 10     
32                       1712; Cxxxx xxxxxxxx; xxx 0   
33                       1712; Cxxxx xxxxxxxx; xxx 0   
34                       1712; Cxxxx xxxxxxxx; xxx 0   
35                       1712; Cxxxx xxxxxxxx; xxx 0
这是我正在运行的代码

    import pandas as pd 

    # import excel file 
    xlsx = pd.ExcelFile("/home/PATH") 
    # create data frame from excel file on sheet 1
    df2 = pd.read_excel(xlsx,'Sheet1')

    df = pd.DataFrame({"Card": df2})
    print(df.head())

    df.iloc[:,0] = df.iloc[:,0].apply(lambda x: x.split(';')[0])
    print df.head()

    # delete columns not relative to us
    df2.drop(df2.columns[[0,5,10,11]],inplace=True,axis=1)

如果我正确理解您的问题,您可以尝试以下方法:

import pandas as pd
import re
df = pd.DataFrame({'col1':['3001234; textTEXT TextTeXTExt.TExt', '1005678;  more text']})
print(df)
col1
0  3001234; textTEXT TextTeXTExt.TExt
1                  1005678; more text


digits = df['col1'].apply(lambda x: re.findall('\d+', str(x)))
print(digits)
0    [3001234]
1    [1005678]
Name: col1, dtype: object

df['col1'] = digits.str.get(0).astype(int)
print(df)
col1
0  3001234
1  1005678

print(df.dtypes)
col1    int32
dtype: object

df2.columns[3]表示列名,而不是列内容。列名没有像map或apply这样的方法。使用df.iloc[:,column_number]或df['column_name']获取列的内容

import pandas as pd
data = [u'11212; xxxxxxxxxx xxxxxxxx', 
u'11212; xxxxxxxxxx xxxxxxxx',   
u'11212; xxxxxxxxxx xxxxxxxx',   
u'11212; xxxxxxxxxx xxxxxxxx',     
u'667788; xxxxxxx xxxxxxxxxxxxx xxxxxx',   
u'55555; xxxxxxx xxxxxxxxxxxxx xxxxxx',  
u'55555; xxxxxxx xxxxxxxxxxxxx xxxxxx',   
u'55555; xxxxxxx xxxxxxxxxxxxx xxxxxx',   
u'33333; xxxxxxx xxxxxxxxxxxxx xxxxxx',   
u'333; xxx xxxxx @ xxx xxx 2 xxxx',   
u'9991; xxxx; xxxxxx xxxxx xxxx @ 2 xxx',   
u'1635; vvvvvvvvvvvv vvvvvv 10',   
u'1635; vvvvvvvvvvvv vvvvvv 10',   
u'1635; vvvvvvvvvvvv vvvvvv 10',   
u'1635; vvvvvvvvvvvv vvvvvv 10',     
u'1712; Cxxxx xxxxxxxx; xxx 0',  
u'1712; Cxxxx xxxxxxxx; xxx 0',   
u'1712; Cxxxx xxxxxxxx; xxx 0',   
u'1712; Cxxxx xxxxxxxx; xxx 0']

# make a dataframe from data as the first column
df = pd.DataFrame({'col0': data})

print df.head()

#Here I use the  iloc to the get the contents of first column (0 th column), in your case, it will 3)
df.iloc[:,0] = df.iloc[:,0].apply(lambda x: x.split(';')[0])

# in your case it will be 
#df.iloc[:,3] = df.iloc[:,3].apply(lambda x: x.split(';')[0])

print df.head()
导致

                                  col0
0            11212; xxxxxxxxxx xxxxxxxx
1            11212; xxxxxxxxxx xxxxxxxx
2            11212; xxxxxxxxxx xxxxxxxx
3            11212; xxxxxxxxxx xxxxxxxx
4  667788; xxxxxxx xxxxxxxxxxxxx xxxxxx
     col0
0   11212
1   11212
2   11212
3   11212
4  667788

因此,从这个
3001234;TExt.TExt
您只想保留以下内容:
3001234
?'code'位=df2.columns[3]。apply(lambda x:re.findall('\d+',str(x)))AttributeError:'unicode'对象没有属性'apply'@deons在您说的下面,您想
逐个单元格编辑整个列单元格
。那么,你能试试df2[‘你的列名’]吗?应用(…)?不行。“我一直得到一个关于密钥的错误。@DeonSaunders你能发布你的数据帧以便我们能找出问题吗?检查帖子我修改了几次,一直得到错误。”。每一列都是浮动的,即使它有文本。为什么?我尝试了你的方法并得到了一个AttributeError:“unicode”对象没有属性“apply”>>>>>>df2.columns[3]=df2.columns[3]。apply(lambda x:“”。join(如果I.isdigit(),则I代表x中的I)你能发布部分数据吗?这样我就可以试一下。再检查一下。我刚刚添加了一个示例数据帧我想您得到的是“AttributeError:'unicode'对象没有属性'apply'>>>>>>df2.columns[3]=df2.columns[3].apply(lambda x:'.join(如果I.isdigit()),则I代表x中的I),因为df2.columns[3]不表示列的内容,而只给出列的名称。作为unicode对象的列的名称没有任何属性“apply”。要选择列的内容,您需要使用最新编辑中显示的iloc。我在实际使用的代码中添加了iloc。我想我有问题,因为我使用的是excel文件。很抱歉再次打扰你。谢谢你的帮助。
df["Col"] = df["Col"].str.extract('(\d+)')