【发布时间】:2017-08-13 21:40:48
【问题描述】:
我是 python 新手,我有一个包含五个气候数据副本的列表,我想将它们分成单独的副本。每个副本的长度为42734,数据帧的总长度(df)为213674。
每个复制都由第一个条目是“复制”的行分隔。我已经在分隔线上方显示了每列数据的标题。
Index year Month Day Rain Evap Max_Temp
42734 Replicate # 2 nan nan nan
我尝试了以下代码,该代码非常笨拙,而且我必须生成 100 个气候复制品,因此不实用。我知道有一种更简单的方法可以做到这一点,但是我没有足够的 python 经验来弄清楚它。 这是我写的代码:
# Import replicate .txt file into a dataframe
df=pd.read_table('5_replicates.txt',sep=r"\s*"
,skiprows=12,engine='python',header=None,
names =['year', 'Month', 'Day', 'Rain', 'Evap', 'Max_T'])
len(df)
i = 42734
num_replicates = 5
## Replicate 1
replicate_1 = df[0:i]
print "length of replicate_1:", len(replicate_1)
# Replicate 2
replicate_2 = df[i+1 : 2*i+1]
print "length of replicate_2:", len(replicate_2)
# Replicate 3
replicate_3 = df[2*i+2 : 3*i+2]
print "length of replicate_3:", len(replicate_3)
# Replicate 4
replicate_4 = df[3*i+3 : 4*i+3]
print "length of replicate_4:", len(replicate_4)
# Replicate 5
replicate_5 = df[4*i+4 : 5*i+4]
print "length of replicate_5:", len(replicate_5)
Any help would be much appreciated!
【问题讨论】:
-
您是否正在寻找一个简洁的版本来解决这个问题?如果是这样,你就快到了。只需利用循环结构并将“复制”存储到列表而不是单个变量中,即可在您自己的代码中利用
i的倍数的模式。您可以尝试自己编写代码。如果您需要有关实际编码解决方案的帮助,请告诉我,我可以在此处发布。 -
另外,100 次重复是什么意思?您是指 100 个不同的文件或数据帧的 100 个部分,而不是代码中的 5 个部分?
-
嗨,我的意思是 100 次,而不是 5 次重复。我正在尝试为此编写一个 for 循环,但我不知道如何每次都增加切片。
-
我已将代码简化为:
-
Replicates = {} for k in range(num_replicates+1): for j in range(num_replicates): Replicates['Replicate{0}'.format(k)] = df[ji+j : ki+j] 但它只给了我最后一个副本,而之前的副本是空的。
标签: python pandas dataframe slice