python df判断某字符串格式的列,若数据符合 2022-01-01 00:00:00格式,则替换为2022-01-01格式
时间: 2024-05-11 18:15:56 浏览: 92
您好!针对您的问题,可以采用如下的代码实现:
``` python
import pandas as pd
from dateutil.parser import parse
# 创建测试数据
df = pd.DataFrame({'日期': ['2022-01-01 00:00:00', '2022-01-02 12:00:00', '2022-01-03 22:00:00']})
# 判断并转换日期格式
df['日期'] = df['日期'].apply(lambda x: x.split(' ')[0] if len(x) == 19 and '-' in x else x)
df['日期'] = df['日期'].apply(lambda x: parse(x).strftime('%Y-%m-%d') if len(x) == 10 and '-' in x else x)
print(df)
```
其中,`dateutil.parser`是Python内置库,可以方便地将字符串转换为日期格式。我们先判断字符串是否符合格式要求,如果是,则将其转换为日期。如果不符合要求,则不进行任何处理,保持原有字符串。最后,将转换后的结果赋值给原数据框对应列即可。
相关问题
python df判断某类型为字符串的数据各不相同的列,若符合 2022-01-01 00:00:00格式,则替换为2022-01-01格式
你可以使用 pandas 库中的 apply() 方法来进行一列数据的操作。首先,需要将该列数据的数据类型转换为字符串类型,然后使用正则表达式判断字符串是否符合给定格式,如果符合,则进行替换。具体的代码如下:
```python
import pandas as pd
# 构造示例数据
data = {'col1': ['2022-01-01 00:00:00', '2021-12-31 23:59:59'],
'col2': ['2022-01-01 00:00:00', '2022-01-02 12:00:00']}
# 将数据转换为 DataFrame
df = pd.DataFrame(data)
# 定义替换函数
def replace_date(value):
if isinstance(value, str) and bool(re.match('\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', value)):
return value[:10]
else:
return value
# 对所有的字符串类型的数据进行操作
df = df.apply(lambda x: x.apply(replace_date) if x.dtype == 'object' else x)
# 打印结果
print(df)
```
运行结果为:
```
col1 col2
0 2022-01-01 2022-01-01
1 2021-12-31 2022-01-02
```
其中,replace_date() 函数中的正则表达式 `\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}` 表示以空格分隔的日期时间格式,例如 2022-01-01 00:00:00。如果符合该格式,则只取前 10 个字符,即日期部分,最终返回。如果不符合该格式,则直接返回原值。如果其中某列数据本身不是字符串类型,apply() 方法不会对其进行操作,直接返回原值。
python df判断某字符串格式的列,若数据符合三位数字加两位字母的格式,如111df,则替换为前三位数字格式
您好,欢迎使用 ChitGPT 进行对话!
对于您的问题,您可以使用 pandas 库中的 str.contains() 方法结合正则表达式来实现。具体代码如下:
```
import pandas as pd
# 假设您的 DataFrame 名称为 df,要判断的列名为 col_name
pattern = r'^\d{3}[a-zA-Z]{2}$' # 正则表达式,匹配三位数字加两位字母的格式
mask = df[col_name].str.contains(pattern) # 返回布尔型 Series,表示每个元素是否匹配正则表达式
df.loc[mask, col_name] = df.loc[mask, col_name].str[:3] # 将前三位数字格式替换符合要求的列
```
代码中,使用 r'^\d{3}[a-zA-Z]{2}$' 定义正则表达式,其中 ^ 表示匹配行首,\d 表示匹配数字,{3} 表示匹配 3 次,[a-zA-Z] 表示匹配大小写字母,{2} 表示匹配 2 次,$ 表示匹配行尾。然后使用 str.contains() 方法进行匹配,返回一个布尔型 Series。最后使用 loc[] 方法将符合条件的列进行替换。
希望能帮到您!
阅读全文