首页 > 解决方案 > 数据框添加迭代

问题描述

我有一个奇怪的(至少对我来说,因为我只是一个初学者)。无论如何,我有一个由 excel 文件制成的熊猫数据框。

df = pd.read_excel(excel_file_path_from_db, engine='openpyxl', sheet_name='Sheet1', skiprows=1)

直截了当,它起作用了。然后我进行一些数字运算并在 excel 文件中添加几列,并在这种情况下使用 openpyxl 更新它。数字运算后,我使用 openpyxl 保存 excel 文件。

wb.save(excel_file_path_from_db)

所有更新的值都保存在文件中。完美,目前进展顺利。现在我想从我输入到 excel 文件中的最后 12 列中创建一个新的数据框。所以我通过再次读取文件来制作数据框。

df_from_updated_excel = pd.read_excel(excel_file_path_from_db, engine='openpyxl', sheet_name='Sheet1', skiprows=1)

现在我选择最后 12 列作为我的新数据框

 df_last_12 = df_from_updated_excel[:, -12:] 

然后我尝试在我的 df_last_12 中打印“hello”列

print(df_last_12['hello']) 

问题是在我的原始数据框中之前有一个“hello”列,我在我的新数据框中输入了一个新的 hello 列,所以当我认为应该在我的数据框。有趣的是,如果我打印df_last_12我所期望的是只有一个“你好”列。但它似乎有这些奇怪的迭代。任何想法我如何设置它以便我没有得到这些你好的迭代?

标签: pythonpandas

解决方案


你的逻辑看起来是正确的。一定是列名和你想的不一样。返回什么df_from_updated_excel.columns?它必须包括hello.1hello.2

df = pd.DataFrame(columns=list("ABCDEFGHIJKLMNONPQRSTUVWXYZ")+["hello"], index=[i for i in range(5)])
df["hello"] = df.index
df = df.iloc[:,-12:]
print(df, "\n", df["hello"])

输出

     P    Q    R    S    T    U    V    W    X    Y    Z  hello
0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN      0
1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN      1
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN      2
3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN      3
4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN      4 
 0    0
1    1
2    2
3    3
4    4
Name: hello, dtype: int64

推荐阅读