首页 > 解决方案 > 比较数据框中特定列行的长度,python

问题描述

输入:

DF1:
name, message
adam, hello, i'am
viola, hi, my name is

data:
name, message
adam, hello, i'am
viola, hi, my name 

我想比较,如果特定名称(例如:adam 和 adam)的消息长度相同,则打印此行。

代码:

if df['message'].apply(lambda x: len(x)) == data['name'].apply(lambda x: len(x)):
    pass
else:
    df['message'].apply(lambda x: print(x)) 
    #edit: i can use maybe df.loc[:,'message'] as well i think

但我收到: TypeError: object of type 'float' has no len(),为什么?

标签: pythondataframe

解决方案


可能有更好的方法,但这可能对您有用:

import pandas
dt = pandas.DataFrame([["Adam","Hello, I am Adam"], ["Viola", "How are you"]], columns=["name", "message"])
data = pandas.DataFrame([["Adam","Hello, I am Adam"], ["Viola", "How are ya"]], columns=["name", "message"])

print(dt)
print(data)

data.columns = ["name", "message_data"]

merged = dt.merge(data, on=["name"])
merged[merged.message.str.len() != merged.message_data.str.len()]

首先,您需要重命名该["message"]列,以便它不会在合并中发生冲突。然后合并两个数据帧,只保留两个数据帧中存在的名称。最后,您将字符串的长度与 in 的长度进行比较["message"]["message_data"]并使用它来提取合并表中不同的行。

如果您只需要该消息,则可以执行以下操作:

merged.loc[merged.message.str.len() != merged.message_data.str.len(), "message"]

逐行打印结果应该很简单。


推荐阅读