我有一个数据框,我正尝试填写“日期”列(即文本)中的值,如下所示:
数据帧是使用dfs=pd.read_html(pageUrl,infer_types=False)
然后df=dfs[0]
生成的
Date Time datetime Year
0 None None 2007
1 May 1 0:58 None 2007
2 1:00 None 2007
3 1:30 None 2007
4 1:45 None 2007
5 3:45 None 2007
6 4:45 None 2007
7 6:30 None 2007
8 7:15 None 2007
9 7:45 None 2007
df.dtypes
显示;
Date object
Time object
datetime object
Year int64
dtype: object
首先,我尝试逐行填充。如果当前的“日期”为空,则尝试向后移一行以获得上一个值:
def fillDate(r):
if r['Date']=="":
p=r.shift(-1)
r['Date']=p['Date']
return r
然后
df.apply(fillDate,axis=1)
这会在“日期”列中填充“时间”。
因此,然后我尝试使用axis = 0(每列)应用并修改函数,使其仅将其应用于“日期”列(我看不到如何仅将其应用于一列)
def fillDate(r):
if r.name=='Date':
if r['Date']=="":
p=r.shift(-1)
r['Date']=p['Date']
return r
然后
df.apply(fillDate,axis=0)
给出错误
KeyError: ('Date', u'occurred at index Date')
目的是在“日期”为空白时,使用上一个单元格中的值填充“日期”中的值。
我怎样才能做到这一点?
参考方案
In [16]: df = pd.read_fwf(StringIO(data),widths=[5,12,8,8,6],header=0,names=['idx','date','time','datetime','year'])
# simulate what the OP actually has (though this doesn't happen upon read in)
In [30]: df['date'] = df['date'].fillna('')
In [31]: df
Out[31]:
idx date time datetime year
0 0 None None 2007
1 1 May 1 0:58 None 2007
2 2 1:00 None 2007
3 3 1:30 None 2007
4 4 1:45 None 2007
5 5 3:45 None 2007
6 6 4:45 None 2007
7 7 6:30 None 2007
8 8 7:15 None 2007
9 9 7:45 None 2007
In [32]: df.loc[df.date=='','date'] = np.nan
In [33]: df
Out[33]:
idx date time datetime year
0 0 NaN None None 2007
1 1 May 1 0:58 None 2007
2 2 NaN 1:00 None 2007
3 3 NaN 1:30 None 2007
4 4 NaN 1:45 None 2007
5 5 NaN 3:45 None 2007
6 6 NaN 4:45 None 2007
7 7 NaN 6:30 None 2007
8 8 NaN 7:15 None 2007
9 9 NaN 7:45 None 2007
In [34]: df['date'] = df['date'].ffill()
In [35]: df
Out[35]:
idx date time datetime year
0 0 NaN None None 2007
1 1 May 1 0:58 None 2007
2 2 May 1 1:00 None 2007
3 3 May 1 1:30 None 2007
4 4 May 1 1:45 None 2007
5 5 May 1 3:45 None 2007
6 6 May 1 4:45 None 2007
7 7 May 1 6:30 None 2007
8 8 May 1 7:15 None 2007
9 9 May 1 7:45 None 2007
python pandas:按行对条件进行分组 - python我有一个大的pandas数据框,试图从中形成一些行的对。我的df如下所示:object_id increment location event 0 1 d A 0 2 d B 0 3 z C 0 4 g A 0 5 g B 0 6 i C 1 1 k A 1 2 k B ... ... ... ... 对象ID描述特定的对象。增量是每次发生某事(跟踪订单)时…
Python-Excel导出 - python我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…
如何从'pandas.core.frame.DataFrame'中消除第一列 - python我有以以下格式输出的代码。我应该如何删除第一列并可以将第二行的元素存储在列表中?输出类型为'pandas.core.frame.DataFrame'格式 speed lat lng 1 19.130506 12.616756 7.460664 2 63.595894 52.616838 7.460691 3 40.740044 72.616913 7.460…
pandas DataFrame:根据另一列中的布尔值计算总和 - python我对Python相当陌生,我尝试在pandas中模拟以下逻辑我目前正在循环抛出行,并希望对前几行的AMOUNT列中的值求和,但只求和最后一次看到的“ TRUE”值。实际数据似乎效率低下(我的数据框大约有500万行)?想知道用Python处理这种逻辑的有效方法是什么?逻辑:逻辑是,如果FLAG为TRUE,我想对前几行的AMOUNT列中的值求和,但只求和最后一次…
Python:如何根据另一列元素明智地查找一列中的空单元格计数? - pythondf = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…