сравнение длины отдельных строк столбца в dataframe, python - PullRequest
1 голос
/ 09 мая 2019

Ввод:

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

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

Я хочу сравнить, если длина сообщений для определенного имени (например, Адам и Адам) совпадает, иначе выведите эту строку.

Код:

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(), почему?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Лучше всего было бы объединить два кадра данных на основе имени.

import pandas as pd
#construct df1
#construct df2

#merge two df based on name
df=pd.merge(df1,df2,on="name")

#get the length of messages and filter out unequal length

df_same_length=df[~df["message_x"].astype(str).str.len()==df["message_y"].astype(str).str.len()]

print(df_same_length["name"])
2 голосов
/ 09 мая 2019

Возможно, есть лучший способ, но он может сработать для вас:

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"], чтобы он не конфликтовал при слиянии. Затем вы объединяете оба фрейма данных, сохраняя только имена, которые существуют в обоих фреймах. Наконец, вы сравниваете длины строк в ["message"] с длинами строк в ["message_data"] и используете их для извлечения тех строк объединенной таблицы, которые отличаются.

Если вам конкретно нужно только сообщение, вы можете сделать:

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

Печать результатов построчно должна быть простой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...