Python Pandas-在for循环迭代的末尾添加一行
所以我有一个for循环,它获取一系列值并进行一些测试:Python Pandas-在for循环迭代的末尾添加一行,python,pandas,Python,Pandas,所以我有一个for循环,它获取一系列值并进行一些测试: list = [1, 2, 3, 4, 5, 6] df = pd.DataFrame(columns=['columnX','columnY', 'columnZ']) for value in list: if value > 3: df['columnX']="A" else: df['columnX']="B" df['columnZ']="Another value
list = [1, 2, 3, 4, 5, 6]
df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'])
for value in list:
if value > 3:
df['columnX']="A"
else:
df['columnX']="B"
df['columnZ']="Another value only to be filled in this condition"
df['columnY']=value-1
我怎样才能做到这一点,并且无论if的结果如何,都将每个循环迭代的所有值保持在一行中?我可以保留一些列为空吗
我的意思是类似于以下过程:
[create empty row] -> [process] -> [fill column X] -> [process] -> [fill column Y if true] ...
比如:
我不确定是否完全理解,但我认为这可能是一个解决方案:
list = [1, 2, 3, 4, 5, 6]
d = {'columnX':[],'columnY':[]}
for value in list:
if value > 3:
d['columnX'].append("A")
else:
d['columnX'].append("B")
d['columnY'].append(value-1)
df = pd.DataFrame(d)
对于第二个问题,只需添加另一个条件
list = [1, 2, 3, 4, 5, 6]
d = {'columnX':[],'columnY':[], 'columnZ':[]}
for value in list:
if value > 3:
d['columnX'].append("A")
else:
d['columnX'].append("B")
if condition:
d['columnZ'].append(xxx)
else:
d['columnZ'].append(None)
df = pd.DataFrame(d)
根据您给出的示例,我稍微更改了您的代码,以实现您共享的结果:
list = [1, 2, 3, 4, 5, 6]
df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'])
for index, value in enumerate(list):
temp = []
if value > 3:
#df['columnX']="A"
temp.append("A")
temp.append(None)
else:
#df['columnX']="B"
temp.append("B")
temp.append("Another value") # or you can add any conditions
#df['columnY']=value-1
temp.append(value-1)
df.loc[index] = temp
print(df)
这将产生以下结果:
columnX columnY columnZ
0 B Another value 0.0
1 B Another value 1.0
2 B Another value 2.0
3 A None 3.0
4 A None 4.0
5 A None 5.0
df.index打印为:Int64Index([0,1,2,3,4,5],dtype='int64')您可以根据输入列表大小使用索引准备/初始化数据帧,然后从
np获取电源。其中例程:
In [111]: lst = [1, 2, 3, 4, 5, 6]
...: df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'], index=range(len(lst)))
In [112]: int_arr = np.array(lst)
In [113]: df['columnX'] = np.where(int_arr > 3, 'A', 'B')
In [114]: df['columnZ'] = np.where(int_arr > 3, df['columnZ'], '...')
In [115]: df['columnY'] = int_arr - 1
In [116]: df
Out[116]:
columnX columnY columnZ
0 B 0 ...
1 B 1 ...
2 B 2 ...
3 A 3 NaN
4 A 4 NaN
5 A 5 NaN
对于每个循环迭代,将所有值保留在一行中-您的意思是什么?这里已经回答:@Asif I'm get:keyrerror:“标签[0]不在[index]”中,当尝试按照您提到的问题的方式“附加”新行时。我想要的更像是:创建emtpy行并根据一系列过程填充行。请检查我的编辑,我添加了另一个与“保留空列”相关的问题。因此我被迫填充所有列,即使是我没有值的列?我这样问是因为在最初的解决方案中,我有很多列,其中很多列都是空的
In [111]: lst = [1, 2, 3, 4, 5, 6]
...: df = pd.DataFrame(columns=['columnX','columnY', 'columnZ'], index=range(len(lst)))
In [112]: int_arr = np.array(lst)
In [113]: df['columnX'] = np.where(int_arr > 3, 'A', 'B')
In [114]: df['columnZ'] = np.where(int_arr > 3, df['columnZ'], '...')
In [115]: df['columnY'] = int_arr - 1
In [116]: df
Out[116]:
columnX columnY columnZ
0 B 0 ...
1 B 1 ...
2 B 2 ...
3 A 3 NaN
4 A 4 NaN
5 A 5 NaN