簡體   English   中英

如何將具有單個 csv 列的 Pandas 數據框插入 MySQL 數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM