python - 比较数据框中特定列行的长度,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()
,为什么?
解决方案
可能有更好的方法,但这可能对您有用:
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"]
逐行打印结果应该很简单。
推荐阅读
- c# - 我如何从流写入文件而不破坏它?
- python - 错误:您的 WSGIPath 引用的文件不存在
- rust - 不可变引用和可变引用的生命周期有什么区别?
- mysql - mysql加入多个查询
- python - Python ImportError(很可能是由于循环导入)用于 pip install 但不是本地 setup.py
- java - 如何通过 Retrofit 中的回调访问 onResponse 方法中的数据?
- python - 如何只为字符串列中的特定单词集而不是熊猫数据框中的整个单元格着色?
- php - 如何以多维数组格式排列 mysqli 结果集?
- python - 在 Python 中重新排序我的字符串的内容
- tensorflow2.0 - Yolov3 到 Tensorrt:tf-keras Lambda 层的自定义插件