:ここ
for f in glob.glob("./gowall-users-export-*.xlsx"):
df = pd.read_excel(f)
all_users_sheets_hosts.append(df)
j = re.search('(\d+)', f)
df.columns = df.columns.str.replace('.*Hosted Meetings.*', 'Hosted Meetings' + ' ' + j.group(1))
all_users_sheets_hosts = reduce(lambda left,right: pd.merge(left,right,on=['First Name', 'Last Name'], how='outer'), all_users_sheets_hosts)
は、得られたDFの最初の数行である:ここ
は私のforループ(および単一DFにマージ以降)、現在、Emails
、Created
、Facilitated Meetings
、Attended Meetings
列の場合は、right
DataFrameから削除してください。 Company
らので
import pandas as pd
import functools
for f in glob.glob("./gowall-users-export-*.xlsx"):
df = pd.read_excel(f)
all_users_sheets_hosts.append(df)
j = re.search('(\d+)', f)
df.columns = df.columns.str.replace('.*Hosted Meetings.*',
'Hosted Meetings' + ' ' + j.group(1))
# Drop rows of all NaNs from the final DataFrame in `all_users_sheets_hosts`
all_users_sheets_hosts[-1] = all_users_sheets_hosts[-1].dropna(how='all', axis=0)
def mergefunc(left, right):
cols = ['Company', 'Emails', 'Created', 'Facilitated Meetings', 'Attended Meetings']
right = right.drop(cols, axis=1)
result = pd.merge(left, right, on=['First Name', 'Last Name'], how='outer')
return result
all_users_sheets_hosts = functools.reduce(mergefunc, all_users_sheets_hosts)
:全てNaN
値を持つ行を削除するには、result.dropna(how='all', axis=0)
を使用します。 al。列は、left
DataFrame内にのみ存在し、それらの列の拡散はありません。ただし、left
とright
DataFramesの列の値が異なる場合、最初のDataFrameの値はall_users_sheets_hosts
に保持されます。
代替、left
とright
データフレームはCompany
らに対して同じ値を持つ場合。 al。もう1つのオプションは、これらの列にも簡単にマージすることです。
def mergefunc(left, right):
cols = ['First Name', 'Last Name', 'Company', 'Emails', 'Created',
'Facilitated Meetings', 'Attended Meetings']
result = pd.merge(left, right, on=cols, how='outer')
return result
all_users_sheets_hosts = functools.reduce(mergefunc, all_users_sheets_hosts)
NaN行は何を構成していますか?それは* any *値がNaNの行ですか?または* all *値がNaNの行?または...? – unutbu
この場合、任意のNaN値を持つ行はすべてのNaN値を持つため、違いはありません。しかし、私はそれを言及すべきだった。 –