我有一個從谷歌表中讀取的熊貓資料框。然后我tag使用以下方法添加了該列:
df['tag'] = df.filter(like = 'Subject', axis = 1).apply(lambda x: np.where(x == 'Y', x.name,'')).values.tolist()
df['tag'] = df['tag'].apply(lambda x: [i for i in x if i!= ''])
結果示例資料幀:
Id Name Subject-A Subject-B Total tag
0 1 A Y 100 [Subject-A]
1 2 B Y 98 [Subject-B]
2 3 C Y Y 191 [Subject-A, Subject-B]
3 4 D Y 100 [Subject-B]
4 5 E Y 95 [Subject-B]
然后,在將tag列轉換為逗號分隔的字串后,我將資料框匯出到 MySQL 資料庫:
df['tag'] = df['tag'].map(lambda x : ', '.join(str(i) for i in x)).str.replace('Subject-','')
df
Id Name Subject-A Subject-B Total tag
0 1 A Y 100 A
1 2 B Y 98 B
2 3 C Y Y 91 A, B
3 4 D Y 100 B
4 5 E Y 95 B
df.to_sql(name = 'table_name', con = conn, if_exists = 'replace', index = False)
但在 MySQL 資料庫中,tag列是:
A,
,B
A,B
,B
,B
我的實際資料有許多這樣的“主題”列,因此結果如下所示:
, , , D
A, ,C,
...
...
有人可以讓我知道為什么它在 Pandas 中給出了預期的結果,但是當我將資料框保存在云 SQL 中時,該列看起來不同。MySQL 資料庫中的預期輸出與tag列在 Pandas 中的顯示方式相同。
uj5u.com熱心網友回復:
這是替代解決方案,似乎是一些與資料相關的問題。
首先Subject使用 remove過濾列,Subject-然后使用DataFrame.dot帶有分隔符的列名稱,從右側最后一個帶分隔符:
df1 = df.filter(like = 'Subject').rename(columns=lambda x: x.replace('Subject-',''))
print (df1)
A B
0 Y NaN
1 NaN Y
2 Y Y
3 NaN Y
4 NaN Y
df['tag'] = df1.eq('Y').dot(df1.columns ', ').str.rstrip(', ')
print (df)
Id Name Subject-A Subject-B Total tag
0 1 A Y NaN 100 A
1 2 B NaN Y 98 B
2 3 C Y Y 191 A, B
3 4 D NaN Y 100 B
4 5 E NaN Y 95 B
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/345071.html
下一篇:洗掉熊貓資料框中無意義的字符
