我正在尝试在数据帧的第一列中为数据帧的每一行使用特定字符附加数组。
以下代码仅适用于第一行:
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循环不能迭代?
您应该使用[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']