Pandas DataFrame,将具有多个值的列划分为多个列并去除空值
Pandas DataFrame, divide a column having multiple values into multiple columns and remove null values
我有一个数据框,其特定列的温度值如下所示
'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
请帮帮我。
尝试:
train[["Minimum Temperature", "Maximum Temperature"]]=train["Cellar Temperature"].str.split("-", expand=True, n=1)
str.split()
将按提供的分隔符拆分字符串 - 在本例中为 -
。然后 expand
将分解拆分数组,因此每个元素将进入单独的列。然后 n=1
会将最大拆分限制为 1(否则你会得到一个错误,以防你在任何单元格中有超过 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
要直接更正您的代码,请尝试
train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if pd.isnull(x) else x.split("-")[1])
我有一个数据框,其特定列的温度值如下所示
'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
请帮帮我。
尝试:
train[["Minimum Temperature", "Maximum Temperature"]]=train["Cellar Temperature"].str.split("-", expand=True, n=1)
str.split()
将按提供的分隔符拆分字符串 - 在本例中为 -
。然后 expand
将分解拆分数组,因此每个元素将进入单独的列。然后 n=1
会将最大拆分限制为 1(否则你会得到一个错误,以防你在任何单元格中有超过 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
要直接更正您的代码,请尝试
train["Maximum Temperature"] = train["Cellar Temperature"].apply(lambda x: np.nan if pd.isnull(x) else x.split("-")[1])