Pandas 处理错误格式

在实际场景中,数据来自不同的来源,导致数据格式不一致。例如,由于数据是从不同来源复制的,一列可能包含整数和字符串类型的数据。

这种不一致性会带来挑战,使得数据分析变得困难甚至不可能。

让我们看一个例子。

import pandas as pd

# create dataframe
data = {
    'Country': ['USA', 'Canada', 'Australia', 'Germany', 'Japan'],
    'Date': ['2023-07-20', '2023-07-21', '2023-07-22', '2023-07-23', '2023-07-24'],
'Temperature': [25.5, '28.0', 30.2, 22.8, 26.3]
} df = pd.DataFrame(data) # calculate the mean temperature mean_temperature = df['Temperature'].mean() print(mean_temperature)

输出

TypeError: unsupported operand type(s) for +: 'float' and 'str'

在此,Temperature 列包含格式不一致的数据,混合了 floatstring 类型,这导致了 TypeError

使用 Pandas,我们可以通过将列中的所有值转换为特定格式来处理此类问题。


将数据转换为正确格式

我们可以通过将包含不一致数据的列转换为特定格式来消除数据中的不一致性。例如,

import pandas as pd

# create dataframe
data = {
    'Country': ['USA', 'Canada', 'Australia', 'Germany', 'Japan'],
    'Date': ['2023-07-20', '2023-07-21', '2023-07-22', '2023-07-23', '2023-07-24'],
'Temperature': [25.5, '28.0', 30.2, 22.8, 26.3]
} df = pd.DataFrame(data)
# convert temperature column to float df['Temperature'] = df['Temperature'].astype(float)
# calculate the mean temperature mean_temperature = df['Temperature'].mean() print(mean_temperature)

输出

26.560000000000002

在此示例中,我们使用 astype()Temperature 列的所有值转换为 float。这解决了包含混合数据列的问题。


处理混合日期格式

在现实生活中,您经常遇到的另一种常见数据格式不一致的示例是混合日期格式。

日期可以表示为各种格式,例如 mm-dd-yyyydd-mm-yyyyyyyy-mm-dd 等。此外,还可以使用不同的分隔符,例如 /-. 等。

我们可以通过将包含日期的列转换为 DateTime 格式来处理此问题。

让我们看一个例子。

import pandas as pd

# create a sample dataframe with mixed date formats
df = pd.DataFrame({'date': ['2022-12-01', '01/02/2022', '2022-03-23', '03/02/2022', '3 4 2023', '2023.9.30']})

# convert the date column to datetime format df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=True)
print(df)

输出


   date
0 2022-12-01
1 2022-02-01
2 2022-03-23
3 2022-02-03
4 2023-04-03
5 2023-09-30

在上面的示例中,我们将混合日期格式转换为统一的 yyyy-mm-dd 格式。此处,

  • format='mixed':指定给定日期的格式可以不同
  • dayfirst=True:指定在解释日期时,日期应在月份之前

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战