Python ';系列';对象没有属性';len';熊猫CSV文件

Python ';系列';对象没有属性';len';熊猫CSV文件,python,pandas,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],

我想根据包含字符数的列进行打印。在该特定列中包含不同长度的字符串。我目前的代码如下

  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个字符长

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

相反,我们可以使用布尔序列作为索引,将数据帧拆分为行的子集。这将返回仅包含
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
作为groupby中的slice参数。

错误消息非常清楚:没有名为
len
Series
方法。因此,您会遇到类似
df['UDH'].len(8)
这样的表达式的问题。你在这里写
len
想要达到什么目的?嗨@ApproachingDarknessFish,谢谢你关注我的问题。我对熊猫很陌生。UDH列包含具有不同字符串数的不同值,最小字符数为8,最大字符数为12。我是否对len做了什么错误,或者应该是.str.len(8)?确实存在一个方法
DataFrame.str.len
,但它不带参数
df['UDH'].str.len()
将为您提供一个系列,其中包含
df['UDH']
列中每个字符串的字符数。您是否正在尝试选择
df
列中
'UDH'
包含一定数量字符的行?@ApproachingDarknessFish是的,这正是我要查找的。你能给我举个例子吗?我试过这样做,对吗?df_i=df.groupby(df[df_i-1,'原始发件人ID','接收日期/时间')['Body'].apply(''.join).reset_index()很抱歉打扰您,我对python和pandas非常陌生,因此,速度有点慢this@SyafiqRosli如果没有关于程序和相关变量的更多信息,可能很难准确判断。@AMC更新了有关我的csv文件和目标的信息result@approchingDarknessFish如果您能提供反馈,我将不胜感激。