有没有可能使用结构提取物提取Pandas的所有行?

2024-09-28 22:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的数据框。你知道吗

    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'

我怎样才能解决这个问题?你知道吗


Tags: 数据代码nameinselfiddfreturn
1条回答
网友
1楼 · 发布于 2024-09-28 22:36:05

对于第二列的返回Series,您只需要按1选择,因为DataFrame没有实现^{}

df.iloc[:, 1].str.extract('(.)(.{2})(.*)')

或按系列的列名选择:

df['ID'].str.extract('(.)(.{2})(.*)')

如果使用:

df.iloc[:, 1:2]

它返回一列数据帧,因此会引发错误。你知道吗

样本

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'>

相关问题 更多 >