Python 在迭代多个数据帧时删除行
因此,我有一个数据帧列表:Python 在迭代多个数据帧时删除行,python,python-3.x,pandas,Python,Python 3.x,Pandas,因此,我有一个数据帧列表: yldDF = [dem2y, dem5y, dem10y, dem30y] Unnamed: 0 BBK01.WT0202 4 2014-01-02 0.21 5 2014-01-03 0.21 6 2014-01-04 . 7 2014-01-05 . 8 2014-01-06 0.20 9 2014-01-07 0.21
yldDF = [dem2y, dem5y, dem10y, dem30y]
Unnamed: 0 BBK01.WT0202
4 2014-01-02 0.21
5 2014-01-03 0.21
6 2014-01-04 .
7 2014-01-05 .
8 2014-01-06 0.20
9 2014-01-07 0.21
10 2014-01-08 0.21
11 2014-01-09 0.23
12 2014-01-10 0.21
13 2014-01-11 .
其中,每个数据帧如上图所示。
现在,当我尝试遍历数据帧以删除第二列中的“.”时,它似乎不起作用
dem2y = pd.read_csv("0202.csv")
dem5y = pd.read_csv("0505.csv")
dem10y = pd.read_csv("1010.csv")
dem30y = pd.read_csv("3030.csv")
### Begin cleaning
yldDF = [dem2y, dem5y, dem10y, dem30y]
for i in yldDF:
i.drop(i.columns[2], axis = 1,inplace = True)
i.drop(range(4),inplace=True)
i = i[i[i.columns[1]].apply(lambda x: str(x)!=".")]
我在一个数据帧上尝试了最后一行,它似乎工作得非常好,但是当我作为循环的一部分尝试时,它似乎没有任何效果。这里有我遗漏的东西吗?或者这可能是一个bug?如果问题是只有
i
被修改,您可以尝试以下技巧:
# Store your `pandas.DataFrame` in a dict
yldDict = {'dem2y': dem2y, 'dem5y': dem5y, 'dem10y': dem10y, 'dem30y': dem30y}
# Loop on the keys of the dict
for keys in yldDict.keys():
df = yldDict.get(keys, 'error') # Get pandas.DataFrame from dict
# Do the operation you need to do
df.drop(df.columns[2], axis = 1, inplace = True)
df.drop(range(4), inplace=True)
df = df[df[df.columns[1]].apply(lambda x: str(x)!=".")]
# Post to dict
yldDict[keys] = df
# Extract from dict
dem2y, dem5y, dem10y, dem30y = yldDict['dem2y'], yldDict['dem5y'], yldDict['dem10y'], yldDict['dem30y']
# Delete dict
del yldDict
也许可以尝试将
i=i[i.columns[1]].apply(lambda x:str(x)!=”)]
替换为i=i.loc[i[i.columns[1]].astype(str)!=”,:]
知道为什么原始方法不起作用吗?我会很好奇到底是什么原因导致了这种情况,如果不尝试,它看起来像是i[i.columns[1]].apply(lambda x:str(x)!=”)
将返回一个布尔值pd.Series
(真/假)当columns[1]!=”时为True
另外,您正在修改变量i
,该变量依次接受值dem2y
,dem5y
,dem10y
,dem30y
。您确定您的更改已应用于dem2y中的pandas.DataFrame。。。还是仅仅在i
?在循环之后,检查i
的值,它是否与您期望的一样?如果是,您知道您正在修改i
,但未理解dem2y
,因此变量i正在循环中修改,但这不会保存对实际dem2y变量的更改?