“系列”对象没有属性“ len”熊猫CSV文件

时间:2020-02-29 01:10:49

标签: python pandas

我要基于包含字符数的列进行打印。在该特定列中包含不同长度的字符串。我当前的代码如下;

  if df['UDH'].len(8):
    df=df.groupby(df[['UDH'].str[:7],'Original Sender ID','Received Date/Time'])['Body'].apply(' '.join).reset_index()
    if df['UDH'].len(9):
        df=df.groupby(df[['UDH'].str[:8],'Original Sender ID','Received Date/Time'])['Body'].apply(' '.join).reset_index()
        if df['UDH'].len(10):
            df=df.groupby(df[['UDH'].str[:9],'Original Sender ID','Received Date/Time'])['Body'].apply(' '.join).reset_index()
            if df['UDH'].len(11):
                df=df.groupby(df[['UDH'].str[:10],'Original Sender ID','Received Date/Time'])['Body'].apply(' '.join).reset_index()
                if df['UDH'].len(12):
                    df=df.groupby(df[['UDH'].str[:11],'Original Sender ID','Received Date/Time'])['Body'].apply(' '.join).reset_index()

我的csv文件包含“正文”,“接收的日期/时间”,“原始发件人ID”和“ UDH”列。

现在,UDH是主键。连接正文的方法是按接收日期/时间,原始发件人ID和UDH分组。但是,UDH中的某些字符只有8个字符长,而某些字符则只有12个字符长。

1 个答案:

答案 0 :(得分:0)

这里有两个问题需要解决。最简单的方法是如何检查一列中字符串的长度。正确的语法是df['UDH'].str.len() == 8。但是,此比较未返回可与bool语句一起使用的简单if值:它返回bool s的 series 系列,告诉我们是否对于列中的 every 元素,字符串长度是否为8。因此,if语句是错误的工具。

相反,我们可以使用布尔序列作为索引,将数据帧分为行的子集。这将返回仅包含df行的数据帧,其中df['UDH']等于8:

rows_of_length_8 = df[df['UDH'].str.len() == 8]

还请注意,无需重复相同的逻辑多次。您可以使用循环:

for i in range(8, 12+1):
    rows_of_length_i = df[df['UDH'].str.len() == i]

并使用i-1作为分组依据中的slice参数。