我使用了"pandas.read_csv“,数据如下所示
A B C D
00 2019-2 3 7 7
01 2019-1 3 3 6
02 2018-4 3 4 6
03 2018-3 3 5 6
04 2018-2 3 6 None
05 2018-1 3 None 7
06 2017-4 3 5 6
07 2017-3 3 4 5
08 2017-2 3 3 5
09 2017-1 3 4 5
10 2016-4 3 3 4
11 2016-3 3 2 4
12 2016-2 4 5 5
13 2016-1 4 3 7
14 2015-4 4 4 11
15 2015-3 4 2 5
16 2015-2 4 None 5
17 2015-1 3 1 None如何将每4行的第一个数据提取到新的数据帧中?它有18行。18不能被4整除,所以我想抛出row16,row17
我想要的结果是这样的
A B C D
00 2019-2 3 7 7
04 2018-2 3 6 0
08 2017-2 3 3 5
12 2016-2 4 5 5我只是试着
N = 4
#first remove last rows if remainders
df = df.iloc[:len(df) // N * N]
#convert to numeric
df['A'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)
df['B'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)
df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)
df['D'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)发布于 2019-11-05 22:55:10
IIUC我们可以在groupby之前对df进行切片。
n=(len(df)//4)*4
df=df.iloc[:n, :].groupby(np.arange(n) // 4).head(1).replace('None',0)
Out[13]:
A B C D
0 2019-2 3 7 7
4 2018-2 3 6 0
8 2017-2 3 3 5
12 2016-2 4 5 5发布于 2019-11-05 23:08:50
您可以通过提供iloc列表来选择多行。所以
df.iloc[[i * n for i in range(len(df) // n)]].replace('None',0)应该这样做,即使df的长度是n的倍数。
发布于 2019-11-05 23:03:05
这也行得通:
df.iloc[df.index[::4]].fillna(0)[:-1]输出:
0 A B C D
index
00 2019-2 3 7 7
04 2018-2 3 6 0
08 2017-2 3 3 5
12 2016-2 4 5 5https://stackoverflow.com/questions/58713902
复制相似问题