簡體   English   中英

Pandas逐行讀取數據

[英]Pandas read data row by row

我有一個看起來像這樣的 csv 文件

緯度 日期1 日期2 日期3
120.55 23.2 1 2 3
1.66 2.3 4 5 6

我想將它導入 sqlite 數據庫,如下所示:

緯度 日期
120.55 23.2 1
120.55 23.2 2
120.55 23.2 3
1.66 2.3 4
1.66 2.3 5
1.66 2.3 6

所以我嘗試了以下代碼

df=pd.read_csv(root+"/"+i,index_col=False)              
            for j in range(df.shape[0]):
                for k in range(df.shape[1]):
                    lon="'"+str(df[' LON'][j])+"'"
                    lat="'"+str(df[' LAT'][j])+"'"                                          
                    for data_i in df.columns.tolist()[2:]:                                                      
                        value="'"+str(df[data_i][k])+"'"                            
                        insert_data='INSERT INTO day_wl_1 VALUES (%s,%s.%s)' %(lon,lat,value)
                        

它會產生相同的緯度但不同行的日期

緯度 日期
120.55 23.2 1
120.55 23.2 2
120.55 23.2 3
120.55 23.2 4
120.55 23.2 5
120.55 23.2 6

如何解決?

你有兩個選擇。 使用stack的選項一:

df.set_index(['lon', 'lat'])
  .stack()
  .rename('date')
  .reset_index(level=2, drop=True)
  .reset_index()

       lon   lat  date
0   120.55  23.2     1
1   120.55  23.2     2
2   120.55  23.2     3
3   120.66  23.3     4
4   120.66  23.3     5
5   120.66  23.3     6
6   120.77  23.4     7
7   120.77  23.4     8
8   120.77  23.4     9
9   120.88  23.5    10
10  120.88  23.5    11
11  120.88  23.5    12

使用melt的選項二:

pd.melt(df, id_vars=['lon', 'lat'], value_vars=['date1', 'date2', 'date3'], value_name='date')
  .drop('variable', axis=1)

       lon   lat  date
0   120.55  23.2     1
1   120.66  23.3     4
2   120.77  23.4     7
3   120.88  23.5    10
4   120.55  23.2     2
5   120.66  23.3     5
6   120.77  23.4     8
7   120.88  23.5    11
8   120.55  23.2     3
9   120.66  23.3     6
10  120.77  23.4     9
11  120.88  23.5    12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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