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