问题描述
FIPS display_name Value
2013 "Aleutians East,(AK)" 172.9
2016 "Aleutians West,(AK)" 172.2
我想将一列分为2列。我尝试过:
df['county','state'] = df['display_name'].str.split(',',expand=True)
输出为:
cnty_fips display_name Value (county,state)
2013 "Aleutians East 172.9 "Aleutians East
2016 "Aleutians West 172.2 "Aleutians West
不确定为什么要擦除数据的后半部分而不将其放入新的列中。 拆分一列给一个县而另一州给州的列时,如何获得两列新列?
解决方法
这里的问题是class GenericValidatorTest {
@Test
void genericValidation() {
Fulfillment input = Fulfillment.builder().fulfillmentId(UUID.randomUUID().toString()).fulfillmentStatus(FulfillmentStatus.CREATED)
.build();
GenericValidator of = GenericValidator.of();
of.nonNull().apply("fulfillment",input).end();
of.nonNull().apply("fulfillmentStatus",input.getFulfillmentStatus())
.isNotEmpty().min(36).max(36).apply("fulfillmentId",input.getFulfillmentId()).end();
}
@Test
void genericValidationWithExceptionInput() {
Fulfillment input = Fulfillment.builder().fulfillmentId(UUID.randomUUID().toString()).fulfillmentStatus(FulfillmentStatus.CANCELLED)
.build();
GenericValidator validator = GenericValidator.of()
.nonNull().apply("fulfillment",input)
.nonNull().apply("fulfillmentStatus",input.getFulfillmentStatus())
.isNotEmpty().min(37).max(35).apply("fulfillmentId",input.getFulfillmentId());
Assert.assertThrows(RuntimeException.class,() -> validator.end());
}
返回两列,但是您正在尝试将该值分配给单个列。以下应该会产生所需的输出。
str.split
,
将一列分为两个单独的列时,需要将它们存储在两个单独的列中。就您而言,您将其存储在列中,但没有将其包装到数据框中。
df = pd.DataFrame({'Fips': [2013,2016],'display_name': ["Aleutians East,(AK)","Aleutians West,(AK)"],'value': [172.9,172.2]})
df[['county','state']] = df['display_name'].str.split(',',expand=True)
请注意,这两列以df[['county','state']]
的形式包装在数据框中,而您只是将其写为df['county','state']
。
输出如下:
Fips display_name value county state
0 2013 Aleutians East,(AK) 172.9 Aleutians East (AK)
1 2016 Aleutians West,(AK) 172.2 Aleutians West (AK)
如果要在分离前删除原始列
df = df.drop('display_name',axis=1)
print(df)
Fips value county state
0 2013 172.9 Aleutians East (AK)
1 2016 172.2 Aleutians West (AK)