如何使用for循环在python中追加数组?

时间:2019-12-11 00:57:27

标签: python for-loop append

我正在尝试在数据帧的第一列中为数据帧的每一行附加一个使用特定字符的数组。

以下代码仅适用于第一行:

indx = []
ldate = data.iat[0, 0]
year = ldate[0:4]
quarter = ldate[6]
myIndex = year + " Q" + quarter
indx.append(myIndex)

但是当我尝试使用for循环对每一行执行此操作时,我得到并显示错误消息:

indx = []
for i in range(0,193):
    ldate = data.iat[0, i]
    year = ldate[0:4]
    quarter = ldate[6]
    myIndex = year + " Q" + quarter
    indx.append(myIndex)

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
IndexError: invalid index to scalar variable.

为什么for循环不能迭代?

1 个答案:

答案 0 :(得分:0)

您应该使用[i, 0]而不是[0, i],因为numpy.arraypandas.DataFrame(如数学中的矩阵)使用[row,column]而不是`[column,row]

import pandas as pd

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])

for i in range(df.shape[0]):
    print(df.iat[i, 0], df[i].to_list())

您还可以使用df.iterrow()(或df.iteritems()df.itertuples())处理没有range()i的行

import pandas as pd

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])

for idx, row in df.iterrows():
    print(row[0], row.to_list())

但是在DataFrame中,您可以无循环地做很多事情

import pandas as pd

df = pd.DataFrame([
    ['2019  1', 1,2,3],
    ['2019  2', 4,5,6],
    ['2019  3', 7,8,9]])

result = df[0].apply(lambda x: x[:4] + " Q" + x[6])

print(result.to_list())

结果

['2019 Q1', '2019 Q2', '2019 Q3']

或直接到同一DataFrame

df['result'] = df[0].apply(lambda x: x[:4] + " Q" + x[6])

print(df)

结果

         0  1  2  3   result
0  2019  1  1  2  3  2019 Q1
1  2019  2  4  5  6  2019 Q2
2  2019  3  7  8  9  2019 Q3