拆分列,但未创建所有新行

问题描述

我有一个如下所示的csv:

    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)