- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下名为 df
的数据框,
Date Data
05/30/2023 3.733
05/30/2022 3.294
05/30/2021 2.391
02/30/2021 1.807
11/30/2020 1.766
08/31/2020 1.920
05/31/2020 1.830
02/29/2020 2.960
11/30/2019 2.860
08/31/2019 2.680
05/31/2019 2.490
02/28/2019 2.560
11/30/2018 2.560
08/31/2018 2.500
05/31/2018 2.400
02/28/2018 2.310
11/30/2017 2.310
08/31/2017 2.350
05/31/2017 2.510
02/28/2017 2.400
11/30/2016 2.270
08/31/2016 2.220
05/31/2016 2.160
02/29/2016 2.160
11/30/2015 2.055
我可以看到第 4 个条目的日期无效。 (一月只有 28 或 29 天)我之前尝试使用
pd.to_datetime
转换日期索引功能,但我一直收到错误消息。所以我尝试了这个。
df['tempdate'] = pd.to_datetime(df.index, errors='coerce')
产生了这张 table ,
Date Data tempdate
05/30/2023 3.733 2023-05-30
05/30/2022 3.294 2022-05-30
05/30/2021 2.391 2021-05-30
02/30/2021 1.807 NaT
11/30/2020 1.766 2020-11-30
08/31/2020 1.920 2020-08-31
05/31/2020 1.830 2020-05-31
02/29/2020 2.960 2020-02-29
11/30/2019 2.860 2019-11-30
08/31/2019 2.680 2019-08-31
05/31/2019 2.490 2019-05-31
02/28/2019 2.560 2019-02-28
11/30/2018 2.560 2018-11-30
08/31/2018 2.500 2018-08-31
05/31/2018 2.400 2018-05-31
02/28/2018 2.310 2018-02-28
11/30/2017 2.310 2017-11-30
08/31/2017 2.350 2017-08-31
05/31/2017 2.510 2017-05-31
02/28/2017 2.400 2017-02-28
11/30/2016 2.270 2016-11-30
08/31/2016 2.220 2016-08-31
05/31/2016 2.160 2016-05-31
02/29/2016 2.160 2016-02-29
11/30/2015 2.055 2015-11-30
问题是我有很多这样的数据框,错误可能出现在随机月份,应该是 30 天,但它们显示为 31。
NaT
的日期中减去 3 天错误。但由于日期不被视为日期,我似乎无法从中减去 3 天。
df.index = np.where(df['tempdate'].isna(), pd.to_datetime(df.index), pd.to_datetime(df['tempdate']-np.timedelta64(3,'D')))
但我仍然收到一个错误,指出日期超出范围。
strings
并将其转换为
int
使用这个减去 3 天,
df.index = np.where(df['tempdate'].isna(), df.index, pd.to_datetime(int(df.index.astype(str).str.split('/')[0]),int(df.index.astype(str).str.split('/')[1])-3,int(df.index.astype(str).str.split('/')[2])))
但我得到这个错误,
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
处理此类错误的最佳方法是什么?如何将此无效日期转换为最近的有效日期?
最佳答案
您可以转换您可以转换的内容,然后使用正则表达式替换损坏的日期,然后更新您之前尝试的转换。
def subtract_3_days(match):
days = int(match.group(1))
return str(days - 3)
tempdate = pd.to_datetime(df["Date"], format="%m/%d/%Y", errors="coerce")
fixed_dates = df.loc[tempdate.isna(), "Date"].str.replace(r"(?<=/)(\d+)(?=/)", subtract_3_days)
tempdate.update(pd.to_datetime(fixed_dates, format="%m/%d/%Y"))
df["proper_dates"] = tempdate
print(df)
Date Data proper_dates
0 05/30/2023 3.733 2023-05-30
1 05/30/2022 3.294 2022-05-30
2 05/30/2021 2.391 2021-05-30
3 02/30/2021 1.807 2021-02-27
4 11/30/2020 1.766 2020-11-30
5 08/31/2020 1.920 2020-08-31
6 05/31/2020 1.830 2020-05-31
7 02/29/2020 2.960 2020-02-29
8 11/30/2019 2.860 2019-11-30
9 08/31/2019 2.680 2019-08-31
10 05/31/2019 2.490 2019-05-31
11 02/28/2019 2.560 2019-02-28
12 11/30/2018 2.560 2018-11-30
13 08/31/2018 2.500 2018-08-31
14 05/31/2018 2.400 2018-05-31
15 02/28/2018 2.310 2018-02-28
16 11/30/2017 2.310 2017-11-30
17 08/31/2017 2.350 2017-08-31
18 05/31/2017 2.510 2017-05-31
19 02/28/2017 2.400 2017-02-28
20 11/30/2016 2.270 2016-11-30
21 08/31/2016 2.220 2016-08-31
22 05/31/2016 2.160 2016-05-31
23 02/29/2016 2.160 2016-02-29
24 11/30/2015 2.055 2015-11-30
分解它:
tempdate = pd.to_datetime(df["Date"], format="%m/%d/%Y", errors="coerce")
将我们能做的转换为日期时间。如果它导致不正确的日期时间,那么我们将以 NaT 值结束。将此数组存储到名为“tempdate”的变量中fixed_dates = df.loc[tempdate.isna(), "Date"].str.replace(r"(?<=/)(\d+)(?=/)", subtract_3_days)
df.loc[tempdate.isna(), "Date"]
-> 无论在哪里tempdate
有一个 NaT 值,从我们的 df
中回到我们原来的“日期”列中找到相应的字符串.str.replace(r"(?<=/)(\d+)(?=/)", subtract_3_days)
从没有很好转换的字符串子集中,找到该数组中被正斜杠包围的所有数字。 (例如,匹配此模式:“/digits/”以获取数字)。然后,当我们找到匹配项时,通过 subtract_3_days
运行它函数将该匹配转换为整数,减去 3,并将新值作为字符串返回。这使得斜线(月份和年份)之前或之后的任何数字都保持不变。现在我们有一个字符串数组,它们的“day”值基本上减去了 3 天。 tempdate.update(pd.to_datetime(fixed_dates, format="%m/%d/%Y"))
由于我们确定了日期,但它们仍然是字符串。我们需要转换它们,然后替换那些 NaT
tempdate 中的值。df["proper_dates"] = tempdate
最后将我们的数组/系列添加回我们的原始数据框作为新列。关于python - 将 Pandas 数据框中的无效日期转换为最近的有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032907/
我有一个接受以下参数的函数: int setvalue(void (*)(void *)); 为了满足参数:void (*)(void *),我创建了这样一个函数: static void *
我有以下代码: typedef void VOID; int f(void); int g(VOID); 在 C 中编译得很好(在 Fedora 10 上使用 gcc 4.3.2)。与 C++ 编译的
这个问题已经有答案了: Is f(void) deprecated in modern C and C++? [duplicate] (6 个回答) 已关闭 7 年前。 B.A.T.M.A.N./A.
我在 ASP.NET Core 3.1 项目上有以下 Identity Server 4 配置: services .AddIdentityServer(y => { y.Events.R
我们有一个 O365 租户,一切都是开箱即用的。租户放置在德国云中,而不是全局 (office.de) 中。我们还开发了一个 Office 插件,使用 OAuth 2.0 授权访问共享点。首先,我们向
我有一个如下所示的路由 routes.MapRoute( name: "Default", url: "{controller}/{action}/{i
我正在尝试使用 OAuth2.0 访问 google 文档。我已经从 Google API 控制台获取了客户端 ID 和 key 。但是当我运行这段代码时,我收到了异常。如果我遗漏了什么,有人可以建议
此代码有效: let mut b: Vec = Vec::with_capacity(a.len()); for val in a.iter() { b.push(val); } 此代码不起作
使用 client_credintials 授权类型请求 EWS oauth2 v2.0 的访问 token 时出现错误。 https://login.microsoftonline.com/tena
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
如何创建 匹配所有无效 Base64 字符的正则表达式?我在堆栈上找到了 [^a-zA-Z0-9+/=\n\r].*$ 但是当我尝试时我得到了带有 - 符号的结果字符串.我根本不知道正则表达式,任何人
我从 Gitlab CI/CD Pipelines 获得错误信息:yaml invalid。问题是由 .gitlab-ci.yml 脚本的第五行引起的: - 'ssh deployer@gita
我有 3 个数据源,设置如下: @Configuration @Component public class DataSourceConfig { @Bean("foo") @Conf
你好,我想用bulkCreate ex 插入数据: [ { "typeId": 5, "devEui": "0094E796CBFCFEF9", "application_name": "Pressu
UIApplicationExitsOnSuspend 不会强制我的应用程序退出。我已经清理过目标、删除了应用程序、重建并重新安装了很多次。 我确实需要退出我的应用程序。 最佳答案 您是否链接了 SD
在 iPhone 配置门户上,显示我的 iPhone 团队配置配置文件无效。有一个“由 Xcode 管理”文本。 “续订”按钮被禁用。 我该如何解决这个问题?谢谢 最佳答案 使用 Xcode 3.2.
好的,所以今天我用我们的“实时”数据库中的新信息更新了我的数据库……从那时起,我的一个表格就出现了问题。如果您需要任何代码,请告诉我,我将对其进行编辑并发布所需的代码... 我有一个报告表格,其中有一
我有一个结构体,其中有一个元素表示为 void (*func)(); 我知道 void 指针通常用于函数指针,但我似乎无法定义该函数。我不断收到取消引用指向不完整类型的指针。我用谷歌搜索了一下但没有结
我正在尝试使用 Coldfusion 9 从 ning 网络获取凭证,所以首先这是测试 api 的 curl 语法: curl -k https://external.ningapis.com/xn/
这个问题已经有答案了: Does C have references? (2 个回答) 已关闭 4 年前。 我正在学习 C 语言引用,这是我的代码: #include int main(void)
我是一名优秀的程序员,十分优秀!