разбить строку в столбце dataframe в python3 - PullRequest
0 голосов
/ 22 октября 2018

У меня есть фрейм данных, который содержит два столбца, как показано ниже:

data = [["76895","How was your day?","767392|docu73635363","How are you doing?"],["67387|876357|58745|874512","split the line"]]
df = pd.DataFrame(data,columns=['col1','col2'])
                  col1                col2
0                 76895            How was your day?
1  767392|docu73635363  How are you doing?
2         67387|876357|58745|874512      split the line

Я хочу разделить значение, созданное на |в две строки и удалите «document» и преобразуйте col1 в int.Желаемый вывод:

data = [["76895","How was your day?","767392","How are you doing?"],["3635363","How are you doing?"],["67387","split the line"],["876357","split the line"],["58745","split the line"],["874512","split the line"]]
df = pd.DataFrame(data,columns=['col1','col2'])
      col1                col2
0    76895            How was your day?
1   767392  How are you doing?
2  3635363  How are you doing?
3    67387      split the line
4   876357      split the line
5    58745     split the line
5   874512      split the line

Моя попытка:

if "|" in df['col1']:

    value = int(df['col1'].split("|")[0])

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я не большой поклонник итерации по Датафреймам.Вместо этого мы могли бы использовать встроенные функции для манипуляции с фреймом данных:

df2 = df['col1'].str.replace('docu', '').str.split('|', expand=True)
df = pd.concat([df[['col2']], df2], axis=1)
df.melt(id_vars='col2', value_name='col1').dropna().drop(columns='variable')

#                 col2      col1
#0  How are you doing?    767392
#1      split the line     67387
#2  How are you doing?  73635363
#3      split the line    876357
#5      split the line     58745
#7      split the line    874512

Использовать .str.split для извлечения всех целых чисел, конкатенировать новый фрейм данных с фреймом данных к тому, что у вас уже есть, и затем использоватьmelt для перехода к длинному формату данных.

0 голосов
/ 22 октября 2018

Вы можете перебирать список и выполнять операции, как показано в приведенном ниже коде.

import pandas as pd
data = [["767392|docu73635363","How are you doing?"],["67387|876357","split the line"]]
df = pd.DataFrame(data,columns=['col1','col2'])
#print(df)

numberList = []
col2_list = []

j = 0
for i in data:
    k = str(i[0])
    m, n = k.split(sep = '|')
    n = n.replace("docu", "")
    numberList.append(m)
    numberList.append(n)
    col2_list.append(i[1])
    col2_list.append(i[1])
#print(col2_list)
#print(numberList)

df_new = pd.DataFrame({'col1' : numberList, 'col2' : col2_list})
print(df_new)

Вывод:

       col1                col2
0    767392  How are you doing?
1  73635363  How are you doing?
2     67387      split the line
3    876357      split the line
...