属性错误:(“'str' 对象没有属性 'str'”,“发生在索引 31978')

我对熊猫很陌生(只有几天的时间),尽管我仍在学习和探索使用熊猫。我有一个大尺寸的csv文件,由十万行组成。我的目标是基于多列将多行连接成一行。最重要的是,通过引用日期/时间以及以后需要包括在内的日期/时间。下面说明了我的csv文件。


       Body                      UDH               Original Sender ID           Received Date/Time

Hi John, Can You            ABC0010101                  GGQMS                   01/02/2001 01:03:19

Wait A moment?              ABC0010102                  GGQMS                   01/02/2001 01:03:20

Whats is                    050004000111              112233445566              01/03/2001 11:16:01

Carrine Doing               050004000112              112233445566              01/03/2001 11:16:01

Over There?                 050004000113              112233445566              01/03/2001 11:16:02

Where is                    CD10F1011                   zwerty                  01/03/2001 15:22:10

Your Homework?              CD10F1012                   zwerty                  01/03/2001 15:22:11

Order for Pizza             AACCDD55001               112233445566              01/04/2001 19:20:21

Now for cheap $.            AACCDD55002               112233445566              01/04/2001 19:20:22

John, you know              G0500781                    GGQMS                   01/04/2001 10:21:21

Where can I get it?         G0500782                    GGQMS                   01/04/2001 10:21:21

正如你在上面看到的是我的csv文件。这里的UDH充当主键,根据字符数(从前到倒数第二)是我们可以识别身体所属的地方。另一部分是接收日期/时间,其中身体的第二部分延迟1秒或超过1秒。


我已经设法将身体连接起来,但是,某些身体由第三部分组成,我没有设法完全连接身体。


以下是我当前的代码:

def problem3():

    filep2 = pd.read_csv(r'/Users/John/Downloads/Practice1/my_r.csv')


    #data cleaning

    filep2['Received Date/Time']= filep2['Received Date/Time'].astype('datetime64[ns]')

    filep2['UDH']=filep2['UDH'].astype(object)

    filep2['Original Sender ID']=filep2['Original Sender ID'].astype(object)

    filep2['Account User Name']=filep2['Account User Name'].astype(object)

    filep2['Body']=filep2['Body'].astype(str)

    filep2['UDH']=filep2['UDH'].str.strip()

    df = pd.DataFrame(filep2)


上面的代码给出了本主题/票证的主题所述的错误。错误消息如下;


杨__羊羊
浏览 131回答 1
1回答

森林海

我可以得到(或多或少)预期的结果,而不用,但直接使用apply()groupby()groups = df.groupby([df['UDH'].str[:-1], 'Original Sender ID'])df2 = groups.agg({'Body':' '.join, 'Received Date/Time':max}).reset_index()我只用于模拟文件。io.StringIO()text = '''       Body                      UDH               Original Sender ID           Received Date/TimeHi John, Can You            ABC0010101                  GGQMS                   01/02/2001 01:03:19Wait A moment?              ABC0010102                  GGQMS                   01/02/2001 01:03:20Whats is                    050004000111              112233445566              01/03/2001 11:16:01Carrine Doing               050004000112              112233445566              01/03/2001 11:16:01Over There?                 050004000113              112233445566              01/03/2001 11:16:02Where is                    CD10F1011                   zwerty                  01/03/2001 15:22:10Your Homework?              CD10F1012                   zwerty                  01/03/2001 15:22:11Order for Pizza             AACCDD55001               112233445566              01/04/2001 19:20:21Now for cheap $.            AACCDD55002               112233445566              01/04/2001 19:20:22John, you know              G0500781                    GGQMS                   01/04/2001 10:21:21Where can I get it?         G0500782                    GGQMS                   01/04/2001 10:21:21'''import pandas as pdimport iodf = pd.read_csv(io.StringIO(text), sep='\s{2,}')#df['Received Date/Time'] = df['Received Date/Time'].astype('datetime64[ns]')#df['UDH'] = df['UDH'].astype(object)#df['Original Sender ID'] = df['Original Sender ID'].astype(object)#df['Account User Name'] = df['Account User Name'].astype(object)#df['Body'] = df['Body'].astype(str)#df['UDH'] = df['UDH'].str.strip()#Filter null row in UDH column#df = df[df['UDH'].notnull()]#df = df.sort_values(by ='UDH')#groups = df.groupby([df['UDH'].str[:-1], 'Original Sender ID'])#for name, data in groups:    #print(name)#    data['Received Date/Time'] = data['Received Date/Time'].min()    #print(data)groups = df.groupby([df['UDH'].str[:-1], 'Original Sender ID'])df2 = groups.agg({'Body':' '.join, 'Received Date/Time':max}).reset_index()#groups = df.groupby([df['UDH'].str[:-1]])#df2 = groups.agg({'Body':' '.join, 'Received Date/Time':max, 'Original Sender ID':min}).reset_index()df2 = df2.sort_values('Received Date/Time')pd.options.display.width = 200print(df2)结果           UDH Original Sender ID                                Body   Received Date/Time2    ABC001010              GGQMS     Hi John, Can You Wait A moment?  01/02/2001 01:03:200  05000400011       112233445566  Whats is Carrine Doing Over There?  01/03/2001 11:16:023     CD10F101             zwerty             Where is Your Homework?  01/03/2001 15:22:114      G050078              GGQMS  John, you know Where can I get it?  01/04/2001 10:21:211   AACCDD5500       112233445566    Order for Pizza Now for cheap $.  01/04/2001 19:20:22
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python