Pandas 系列中的值快速转换方法

84 阅读3分钟

对于一个包含月日信息的 pandas 系列month,需要将其中的值转换为包含两位数字的字符串格式,然后与年份信息相连接。

2、解决方案 方法一:[apply方法] 可以使用apply方法直接将转换规则应用于month系列的每个元素,如: month.apply("{0:0=2d}".format)

huake_00066_.jpg 这种方法具有较高的转换速度,但是得到的month字符串列是一个Series对象,而不是原有的pandas类型。

方法二:[str.zfill方法] 将month转换为字符串类型,然后使用str.zfill方法填充0到指定的长度,如: month = pd.Series([1,2,12]) month.astype(str).str.zfill(2)

这种方法的优势在于得到的month字符串列依然是pandas类型,可以与其他列进行后期的操作。 输出: 0 01 1 02 2 12 dtype: object

为了将month字符串列与年份列连接,可以这样: df.year.astype(str) + '-' + df.month.astype(str).str.zfill(2)

方法三:[pd.to_datetime方法] 将month与年份信息组合成一个带有日期信息的DataFrame,然后使用pd.to_datetime将它转换成时间戳。 最后使用apply()方法将其转换为符合要求的字符串格式。

这种方法可以保证输出的类型仍然是pandas类型,并且转换效率也很高,但数据处理过程可能更复杂一些。

代码例子:

# 以下代码使用的是方法一:[apply方法]

# 假设有一个DataFrame df,其中包含year和month列,其中month列为整数表示的月份值。

df = pd.DataFrame({
    "year": [2020, 2021, 2022],
    "month": [1, 2, 3]
})
# 使用apply方法将month转换为字符串格式,并填充0到两位数字。
df["month_str"] = df["month"].apply("{0:0=2d}".format)

# 输出转换后的month_str列
print(df["month_str"])

# 输出结果:
#   month  year month_str
# 0      1  2020     01
# 1      2  2021     02
# 2      3  2022     03

# 使用方法二:[str.zfill方法]

# 假设有一个DataFrame df,其中包含year和month列,其中month列为整数表示的月份值。

df = pd.DataFrame({
    "year": [2020, 2021, 2022],
    "month": [1, 2, 3]
})
# 将month列转换为字符串格式。
df["month_str"] = df["month"].astype(str)

# 使用str.zfill方法填充0到两位数字。
df["month_str"] = df["month_str"].str.zfill(2)

# 输出转换后的month_str列
print(df["month_str"])

# 输出结果:
#   month  year month_str
# 0      1  2020     01
# 1      2  2021     02
# 2      3  2022     03

# 使用方法三:[pd.to_datetime方法]

# 假设有一个DataFrame df,其中包含year和month列,其中month列为整数表示的月份值。

df = pd.DataFrame({
    "year": [2020, 2021, 2022],
    "month": [1, 2, 3]
})
# 将year和month列组合成一个带有日期信息的列。
df["date"] = pd.to_datetime(df["year"].astype(str) + "-" + df["month"].astype(str))

# 使用apply()方法将其转换为符合要求的字符串格式。
df["date_str"] = df["date"].apply(lambda x: x.strftime("%Y-%m"))

# 输出转换后的date_str列
print(df["date_str"])

# 输出结果:
#   month  year  date       date_str
# 0      1  2020  2020-01  2020-01
# 1      2  2021  2021-02  2021-02
# 2      3  2022  2022-03  2022-03