为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2022-08-16 15:37:09
我对熊猫很陌生(只有几天的时间),尽管我仍在学习和探索使用熊猫。我有一个大尺寸的csv文件,由十万行组成。我的目标是基于多列将多行连接成一行。最重要的是,通过引用日期/时间以及以后需要包括在内的日期/时间。下面说明了我的csv文件。       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正如你在上面看到的是我的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)上面的代码给出了本主题/票证的主题所述的错误。错误消息如下;
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

我可以得到(或多或少)预期的结果,而不用,但直接使用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/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'''


import pandas as pd

import io


df = 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 = 200

print(df2)

结果


           UDH Original Sender ID                                Body   Received Date/Time

2    ABC001010              GGQMS     Hi John, Can You Wait A moment?  01/02/2001 01:03:20

0  05000400011       112233445566  Whats is Carrine Doing Over There?  01/03/2001 11:16:02

3     CD10F101             zwerty             Where is Your Homework?  01/03/2001 15:22:11

4      G050078              GGQMS  John, you know Where can I get it?  01/04/2001 10:21:21

1   AACCDD5500       112233445566    Order for Pizza Now for cheap $.  01/04/2001 19:20:22



查看完整回答
反对 回复 2022-08-16
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信