Python for循环生成';无法插入{},已存在';错误取决于数据帧定义
我有一系列天文观测数据,这些数据被放入每个观测年(即df2015、df2016等)的程序生成的数据帧中。这些数据帧需要在后续过程中进行修改,我将所有这些数据帧都放在列表中。用于定义列表的方法会有所不同。明确定义的列表Python for循环生成';无法插入{},已存在';错误取决于数据帧定义,python,pandas,dataframe,for-loop,Python,Pandas,Dataframe,For Loop,我有一系列天文观测数据,这些数据被放入每个观测年(即df2015、df2016等)的程序生成的数据帧中。这些数据帧需要在后续过程中进行修改,我将所有这些数据帧都放在列表中。用于定义列表的方法会有所不同。明确定义的列表 dfs = [df2015, df2016, df2017, df2018, df2019] 允许对df进行进一步修改,但这与代码的目的不符——自动处理标准数据集,而不考虑年限。程序生成的列表 for yr in years: exec('dfs = [df' + yr
dfs = [df2015, df2016, df2017, df2018, df2019]
允许对df进行进一步修改,但这与代码的目的不符——自动处理标准数据集,而不考虑年限。程序生成的列表
for yr in years:
exec('dfs = [df' + yr + ' for yr in years]')
似乎大部分时间都在工作,如:
for df in dfs:
dfX = df.dtypes
for index, val2 in dfX.items():
if val2 == 'float64':
df.iloc[:,index] = df.iloc[:,index].fillna(0).astype('int64')
,但在某些情况下失败,如:
for df in dfs:
i=1
for i in range(1, 13):
ncol = i + (i-1) *2
if i < 10:
nmon = '0' + str(i)
else:
nmon = '' + str(i)
df.insert(ncol, 'M' + nmon, nmon)
i += 1
我尝试了列表理解而不是for循环,尝试了更改循环嵌套顺序(以防万一),等等
上述参考步骤的目的是将其转换为:
0 1 2 3 4 5 6 7 8 9 ... 15 16 17 18 19 20 21 22 23 24
0 1 713 1623 658.0 1659.0 619 1735 526.0 1810.0 439 ... 437 1903 510.0 1818.0 542 1725 618.0 1637.0 654 1613
1 2 714 1624 657.0 1700.0 618 1736 525.0 1812.0 438 ... 438 1902 511.0 1816.0 543 1724 619.0 1636.0 655 1613
2 3 714 1625 655.0 1702.0 616 1737 523.0 1813.0 437 ... 439 1901 512.0 1814.0 544 1722 620.0 1635.0 656 1612
3 4 714 1626 654.0 1703.0 614 1738 521.0 1814.0 435 ... 440 1900 513.0 1813.0 545 1720 622.0 1634.0 657 1612
4 5 713 1627 653.0 1704.0 613 1739 520.0 1815.0 434 ... 441 1859 514.0 1811.0 546 1719 623.0 1633.0 658 1612
进入这个
0 M01 D01 1 2 M02 D02 3 4 M03 ... 19 20 M11 D11 21 22 M12 D12 23 24
0 1 01 1 713 1623 02 1 658 1659 03 ... 542 1725 11 1 618 1637 12 1 654 1613
1 2 01 2 714 1624 02 2 657 1700 03 ... 543 1724 11 2 619 1636 12 2 655 1613
2 3 01 3 714 1625 02 3 655 1702 03 ... 544 1722 11 3 620 1635 12 3 656 1612
3 4 01 4 714 1626 02 4 654 1703 03 ... 545 1720 11 4 622 1634 12 4 657 1612
4 5 01 5 713 1627 02 5 653 1704 03 ... 546 1719 11 5 623 1633 12 5 658 1612
我相信你们每年都在开发包含重复元素的列表
for yr in years:
exec('dfs = [df' + yr + ' for yr in years]')
列表理解中的yr由for块迭代——这意味着列表理解中的yr的年数
只需为原始列表年数
中的项目写入表示df的相同字符串即可。这会导致在重复字符串列表上循环,并尝试将列插入到刚刚插入这些列的数据帧中。相反,尝试不使用for循环的列表理解
dfs=['df'+str(年)表示年数]
您可以创建去年数据帧的副本列表。如果您的年份列表是例如['2015'、'2016'、'2017'、'2018']
,则您将生成一个dfs作为[df2018、df2018、df2018、df2018]
,这将导致错误
这将得到正确的结果:
dfs = [eval('df' + yr) for yr in years]
它形成所需的数据帧名称并对其求值,这样您就可以得到数据帧列表。谢谢您的建议。我早就试过了。这将生成一个带有df名称的字符串列表,以及dfs中df的格式为```的所有后续循环:``停止工作太棒了!这很有效。你介意简单地提一下原因吗?dfs在打印时似乎是相同的,这是我开始使用的两个定义之一,或者是您的定义。
dfs = [eval('df' + yr) for yr in years]