Sea*_*ala 7 python attributeerror dataframe pandas
我目前有一个 Pandas DataFrames 列表。我正在尝试对每个列表元素(即列表中包含的每个 DataFrame)执行操作,然后将该 DataFrame 保存到 CSV 文件。
我name为每个 DataFrame分配了一个属性,但我意识到在某些情况下程序会抛出错误AttributeError: 'DataFrame' object has no attribute 'name'。
这是我拥有的代码。
# raw_og contains the file names for each CSV file.
# df_og is the list containing the DataFrame of each file.
for idx, file in enumerate(raw_og):
df_og.append(pd.read_csv(os.path.join(data_og_dir, 'raw', file)))
df_og[idx].name = file
# I'm basically checking if the DataFrame is in reverse-chronological order using the
# check_reverse function. If it is then I simply reverse the order and save the file.
for df in df_og:
if (check_reverse(df)):
df = df[::-1]
df.to_csv(os.path.join(data_og_dir, 'raw_new', df.name), index=False)
else:
continue
Run Code Online (Sandbox Code Playgroud)
该程序在我使用的第二个 for 循环中引发错误df.name。
这特别奇怪,因为当我运行print(df.name)它时会打印出文件名。有人会碰巧知道我做错了什么吗?
谢谢你。
解决方案是使用 loc 来设置值,而不是创建副本。
创建 df 的副本会丢失名称:
df = df[::-1] # creates a copy
Run Code Online (Sandbox Code Playgroud)
设置值“保持”原始对象以及名称完整
df.loc[:] = df[:, ::-1] # reversal maintaining the original object
Run Code Online (Sandbox Code Playgroud)
沿列轴反转值的示例代码:
df = pd.DataFrame([[6,10]], columns=['a','b'])
df.name='t'
print(df.name)
print(df)
df.iloc[:] = df.iloc[:,::-1]
print(df)
print(df.name)
Run Code Online (Sandbox Code Playgroud)
输出:
t
a b
0 6 10
a b
0 10 6
t
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20789 次 |
| 最近记录: |