我要基于包含字符数的列进行打印。在该特定列中包含不同长度的字符串。我当前的代码如下;
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个字符长。
答案 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参数。