在加载带有pandas的csv后,我正在加载一堆csv并处理某些列(如果存在)
data = pd.read_csv('Test.csv', encoding = "ISO-8859-1", index_col=0)
此数据框将用于示例
import pandas as pd
data = pd.DataFrame({'A': [1, 2.1, 0, 4.7, 5.6, 6.8],
'B': [0, 1, 0, 0, 0, 0],
'C': [0, 0, 0, 0, 0, 1],
'D': [5, 5, 6, 5, 5.6, 6.8],
'E': [2, 4, 1, 0, 0, 5],
'F': [0, 0, 1, 0, 0, 0],
'G': [0, 0, 0, 0, 0, 0],})
接下来,我检查并选择要处理的特定列
coltitles = ['A', 'B','C', 'D', 'E']
columns = []
for name in coltitles:
if name in data.columns:
columns.append(name)
else:
print (name, 'is missing')
df = data[columns]
if 'A' in df.columns:
#perform some processing, I will put print to simplify it
print ('Exist')
如果我使用data
的数据框,代码可以工作,但如果我从csv加载数据,我会收到警告:
<module3>:74: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
警告是由df = data[columns]
。
代码仍然可以使用警告,但如何在不抑制警告的情况下摆脱此警告?
答案 0 :(得分:1)
链式分配警告/异常旨在通知 用户可能无效的分配。可能存在误报; 无意中报告链式作业的情况。
此警告的目的是向用户标记分配是在DataFrame切片的副本而不是原始Dataframe本身上执行的。
您通常希望使用.loc(或.iloc,.at等)类型索引而不是&#39;链接&#39;索引有可能无法始终按预期工作。
为了清楚说明您只想分配数据的副本(相对于原始切片的视图),您可以将.copy()附加到您的请求中,例如
df = data[columns].copy()
有关详细信息,请参阅documentation。