csv 我如何在python中根据数据将一列拆分为两列

p8ekf7hl  于 2022-12-20  发布在  Python
关注(0)|答案(2)|浏览(270)

例如,我想拆分的列是duration,它有类似-110或2 seasons的数据点,我想为seasons创建一个不同的列,在我当前列中的seasons位置应该为null,因为这将使column int的类型来自string screenshot of my data
我尝试了split函数,但它是用于在数据点之间进行拆分的,而不是用于拆分其他不同的数据点

wlzqhblo

wlzqhblo1#

我已经尝试复制你的 Dataframe 的一部分,以提供下面的解决方案-注意,它也将改变np.NaN值为'空'的要求。
根据屏幕截图创建示例 Dataframe :

movies_dic = {'release_year': [2021,2020,2021,2021,2021,1940,2018,2008,2021], 
'duration':[np.NaN, 94, 108, 97, 104, 60, '4 Seasons', 90, '1 Season']}
stack_df = pd.DataFrame(movies_dic)
stack_df

问题很可能是'duration'列是对象数据类型-即它包含字符串和整数值。我做了2个小函数,它们将利用数据类型并将它们分配到各自的列。第一个是获取所有'string'行并将它们放置在'series_duration'列中:

def series(x):
    if type(x) == str:
        return x
    else:
        return 'Null'

然后,movies函数会保留整数值(即其中不含“Season”一词的整数值):

def movies(x):
    if type(x) == int:
        return x
    else:
        return 'Null'

stack_df['series_duration'] = stack_df['duration'].apply(lambda x: series(x))

stack_df['duration'] = stack_df['duration'].apply(lambda x: movies(x))
stack_df

release_year    duration    series_duration
0   2021    Null           Null
1   2020    94             Null
2   2021    108            Null
3   2021    97             Null
4   2021    104            Null
5   1940    60             Null
6   2018    Null           4 Seasons
7   2008    90             Null
8   2021    Null           1 Season
bbmckpt7

bbmckpt72#

我已经创建了一个示例,以向您提供一些有关如何管理此问题的想法。
首先,我创建了一个DF,其中包含int、格式为' X seasons'的字符串和负数:

import pandas as pd

data = [5,4,3,4,5,6,'4 seasons', -110, 10]
df = pd.DataFrame(data, columns=['Numbers'])

然后我创建了下一个循环,它所做的是根据值的格式(字符串或负数)创建新列,插入它们并将原始值转换为NaN。

index=0
for n in df['Numbers']:    
    if type(n)==str:
        df.loc[index, 'Seasons'] = n
        df['Numbers'] = df['Numbers'].replace([n],  np.nan)
        
    elif n < 0:
        df.loc[index, 'Negatives'] = n
        df['Numbers'] = df['Numbers'].replace([n],  np.nan)
        
    index+=1

输出将如下所示:

Numbers   Seasons Negatives
0   5.0       NaN   NaN
1   4.0       NaN   NaN
2   3.0       NaN   NaN
3   4.0       NaN   NaN
4   5.0       NaN   NaN
5   6.0       NaN   NaN
6   NaN 4 seasons   NaN
7   NaN       NaN   -110.0
8   10.0      NaN   NaN

然后,您可以根据需要调整此示例。

相关问题