Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中循环中的元组索引有问题吗?_Python_Pandas_Dataframe_Tuples - Fatal编程技术网

Python中循环中的元组索引有问题吗?

Python中循环中的元组索引有问题吗?,python,pandas,dataframe,tuples,Python,Pandas,Dataframe,Tuples,我试着计算从上一个假期到下一个假期的天数。我的计算方法如下: holidays = pd.Series(pd.to_datetime(["01.01.2013", "06.01.2013", "14.02.2013","29.03.2013", "31.03.2013", "01.04.2013", &qu

我试着计算从上一个假期到下一个假期的天数。我的计算方法如下:

holidays = pd.Series(pd.to_datetime(["01.01.2013", "06.01.2013", "14.02.2013","29.03.2013",
                                    "31.03.2013", "01.04.2013", "01.05.2013", "03.05.2013",
                                    "19.05.2013", "26.05.2013", "30.05.2013", "23.06.2013",
                                    "15.07.2013", "27.10.2013", "01.11.2013", "11.11.2013",
                                    "24.12.2013", "25.12.2013", "26.12.2013", "31.12.2013",
                                            
                                    "01.01.2014", "06.01.2014", "14.02.2014", "30.03.2014",
                                    "18.04.2014", "20.04.2014", "21.04.2014", "01.05.2014",
                                    "03.05.2014", "03.05.2014", "26.05.2014", "08.06.2014",
                                    "19.06.2014", "23.06.2014", "15.08.2014", "26.10.2014",
                                    "01.11.2014", "11.11.2014", "24.12.2014", "25.12.2014",
                                    "26.12.2014", "31.12.2014",
                                            
                                    "01.01.2015", "06.01.2015", "14.02.2015", "29.03.2015",
                                    "03.04.2015", "05.04.2015", "06.04.2015", "01.05.2015",
                                    "03.05.2015", "24.05.2015", "26.05.2015", "04.06.2015",
                                    "23.06.2015", "15.08.2015", "25.10.2015", "01.11.2015",
                                    "11.11.2015", "24.12.2015", "25.12.2015", "26.12.2015",
                                    "31.12.2015"], dayfirst=True))

#Number of days until next holiday
d_until_next_holiday = []
#Number of days since last holiday
d_since_last_holiday = []

for row in data.itertuples():

    next_special_date = holidays[holidays >= row["Date"]].iloc[0]
    d_until_next_holiday.append((next_special_date - row["Date"])/pd.Timedelta('1D'))

    previous_special_date = holidays[holidays <= row.index].iloc[-1]
    d_since_last_holiday.append((row["Date"] - previous_special_date)/pd.Timedelta('1D'))

#Add new cols to DF
sto2STG14["d_until_next_holiday"] = d_until_next_holiday
sto2STG14["d_since_last_holiday"] = d_since_last_holiday
TypeError: tuple indices must be integers or slices, not str


为什么我有这个错误?我知道行是元组,但我在代码中使用了.iloc[0]和.iloc[-1]?我能做什么?

对于熊猫,你很少需要循环。在这种情况下,
.shift
方法允许您一次性计算所有内容:

导入熊猫
假日=熊猫系列(熊猫到日期时间)([
"01.01.2013", "06.01.2013", "14.02.2013","29.03.2013",
"31.03.2013", "01.04.2013", "01.05.2013", "03.05.2013",
"19.05.2013", "26.05.2013", "30.05.2013", "23.06.2013",
"15.07.2013", "27.10.2013", "01.11.2013", "11.11.2013",
"24.12.2013", "25.12.2013", "26.12.2013", "31.12.2013",
"01.01.2014", "06.01.2014", "14.02.2014", "30.03.2014",
"18.04.2014", "20.04.2014", "21.04.2014", "01.05.2014",
"03.05.2014", "03.05.2014", "26.05.2014", "08.06.2014",
"19.06.2014", "23.06.2014", "15.08.2014", "26.10.2014",
"01.11.2014", "11.11.2014", "24.12.2014", "25.12.2014",
"26.12.2014", "31.12.2014",
"01.01.2015", "06.01.2015", "14.02.2015", "29.03.2015",
"03.04.2015", "05.04.2015", "06.04.2015", "01.05.2015",
"03.05.2015", "24.05.2015", "26.05.2015", "04.06.2015",
"23.06.2015", "15.08.2015", "25.10.2015", "01.11.2015",
"11.11.2015", "24.12.2015", "25.12.2015", "26.12.2015",
"31.12.2015"
],dayfirst=True)
)
结果=(
假期
.sort_值()
.to_框架(“假日”)
.分配(
自上一周起的天数=λdf:df[“假日”]-df[“假日”]。班次(1),
到下一天的天数=λdf:df[“假日”]。班次(-1)-df[“假日”],
)
)
结果.总目(10)
我得到:

     holiday days_since_prev days_until_next
0 2013-01-01             NaT          5 days
1 2013-01-06          5 days         39 days
2 2013-02-14         39 days         43 days
3 2013-03-29         43 days          2 days
4 2013-03-31          2 days          1 days
5 2013-04-01          1 days         30 days
6 2013-05-01         30 days          2 days
7 2013-05-03          2 days         16 days
8 2013-05-19         16 days          7 days
9 2013-05-26          7 days          4 days

你能说出你的数据吗?还有什么是sto2STG14?除了这些问题之外,我还想问一下,您应该使用data.iterrows()和row[1]['Date']中的行,或者使用data.row['Date']中的行,因为它返回一个不允许按字符串切片的元组。如果要将列表作为元组进行迭代,为什么要将其转换为pandas对象?他不使用元组,只想访问日期。这就是为什么我问什么是数据。