python - Pandas 逐行读取数据
问题描述
我有一个看起来像这样的 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
推荐阅读
- react-native - 在我的物理设备中加载时 React-Native App 给出和错误
- amazon-redshift - 在 redshift 中创建数据库特定用户
- c# - Excel 只需要在 c# 中没有数据的行...我的代码适用于某些 excel 表,但不适用于所有
- android - 当我在 RecyclerView 上检查项目时,其他项目也会被检查
- c# - {CallerMemberName} 类似于 nameof() 参数的功能
- controls - Xpages Repeat control inside repeat control
- r - remove global variables in rshiny
- powershell - Add-AppxPackage 隐藏输出中的操作
- reactjs - 从同一路径推送时组件未接收道具 - 反应路由器
- r - 获取数值向量的最小差异