我想要根据包含字符数的列打印。在该特定列中包含不同长度的字符串。我目前的代码如下;
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个字符长。
发布于 2020-02-29 01:51:03
这里有两个问题需要解决。比较容易的是如何检查列中字符串的长度。正确的语法是df['UDH'].str.len() == 8
。但是,这种比较不会返回一个简单的bool
值,我们可以在if
语句中使用这个值:它返回一系列bool
s,告诉我们列中每个元素的字符串长度是否为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]
并在groupby中使用i-1
作为切片参数。
https://stackoverflow.com/questions/60461130
复制相似问题