我正在尝试在数据帧的第一列中为数据帧的每一行附加一个使用特定字符的数组。
以下代码仅适用于第一行:
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循环不能迭代?
答案 0 :(得分:0)
您应该使用[i, 0]
而不是[0, i]
,因为numpy.array
和pandas.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