这是我的数据框。
ID
0 A01G
1 A43B
2 A45C
3 A61B
4 B01J
5 B08B
并且我尝试使用此代码提取它们
df.iloc[0, 1:2].str.extractall('(.)(.{2})(.*)')
得到了这个结果
0 1 2
ID A 01 G
但是我想提取所有行,然后将代码编辑为此
df.iloc[:, 1:2].str.extract('(.)(.{2})(.*)')
查看所有行都提取为我的预期结果
0 1 2
ID A 01 G
A 43 B
A 45 C
A 61 B
B 01 J
B 08 B
但是此df.iloc[:, 1:2].str.extract('(.)(.{2})(.*)')
无法正常工作,并且还执行了错误
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-44-ef9138002e22> in <module>()
----> 1 df_new.iloc[:, 1:2].str.extractall('(.)(.{2})(.*)')
~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
4370 if self._info_axis._can_hold_identifiers_and_holds_name(name):
4371 return self[name]
-> 4372 return object.__getattribute__(self, name)
4373
4374 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'str'
我该如何解决这个问题?
答案 0 :(得分:2)
您仅需要通过1
进行选择才能从第二列返回Series
,因为DataFrame
并未实现Series.str.extract
:
df.iloc[:, 1].str.extract('(.)(.{2})(.*)')
或按系列的列名称选择:
df['ID'].str.extract('(.)(.{2})(.*)')
如果使用:
df.iloc[:, 1:2]
它返回一列DataFrame,所以会引发错误。
示例:
print (df)
col ID
0 10 A01G
1 10 A43B
2 10 A45C
3 10 A61B
4 10 B01J
5 10 B08B
print (df.iloc[:, 1])
0 A01G
1 A43B
2 A45C
3 A61B
4 B01J
5 B08B
Name: ID, dtype: object
print (type(df.iloc[:, 1]))
<class 'pandas.core.series.Series'>
print (df.iloc[:, 1:2])
ID
0 A01G
1 A43B
2 A45C
3 A61B
4 B01J
5 B08B
print (type(df.iloc[:, 1:2]))
<class 'pandas.core.frame.DataFrame'>
您的第一个代码运行良好,因为返回了一个元素系列:
print (df.iloc[0, 1:2])
ID A01G
Name: 0, dtype: object
print (type(df.iloc[0, 1:2]))
<class 'pandas.core.series.Series'>