![](/img/trans.png)
[英]Unable to load a pandas dataframe having a JSON column into mysql database
[英]How to insert a pandas dataframe having a single csv column into MySQL Database
我有一個從谷歌表中讀取的熊貓數據框。 然后我使用以下方法添加了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 中的顯示方式相同。
這是替代解決方案,似乎是一些與數據相關的問題。
首先使用 remove Subject-
過濾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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.