0

我有一个数据框,它的一个特定列具有如下所示的温度值

'35-40',
 '35-40',
 '40-45',
 '40-45',
 '45-50',
 '40-45',
 '40-45',
 nan,
 '40-45',
 nan,
 '40-45',
 '40-45',
 '35-40',

我正在尝试创建一个分隔最低和最高温度的新列。在用“nan”填充的行中,我希望“,”之后的值也为“nan”。我该怎么做?我已经尝试了下面的代码,但它没有工作。

train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if train["Cellar Temperature"][0]==np.nan else (str(x).split("-")[1]))

每当我运行上面的代码时,我都会收到以下错误

IndexError: list index out of range

请帮我。

4

3 回答 3

1

尝试:

train[["Minimum Temperature", "Maximum Temperature"]]=train["Cellar Temperature"].str.split("-", expand=True, n=1)

str.split()将通过提供的分隔符拆分字符串 --在这种情况下。然后expand将爆炸拆分数组,因此每个元素将进入单独的列。然后n=1将最大拆分限制为 1(否则您会收到错误,以防任何单元格中有超过 1 个连字符)。

于 2020-03-01T14:24:34.990 回答
1

您可以使用extract两者来获得:

df['temp'].str.extract('(?P<minimum>\d+)-(?P<maximum>\d+)')

输出:

   minimum maximum
0       35      40
1       35      40
2       40      45
3       40      45
4       45      50
5       40      45
6       40      45
7      NaN     NaN
8       40      45
9      NaN     NaN
10      40      45
11      40      45
12      35      40
于 2020-03-01T15:08:24.733 回答
0

要直接更正您的代码,请尝试

train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if pd.isnull(x) else x.split("-")[1])
于 2020-03-02T08:17:37.983 回答