Как объединить столбец списков в отдельные значения

#python

#python

Вопрос:

Это может быть простой задачей, но у меня возникают трудности с поиском решения. У меня есть фрейм данных с одним столбцом списков. Например, первые три списка в моей колонке выглядят следующим образом: 0: [100.0, 90.8, 74.0, 16.0] 1: [98.0, 87.84, 54.0, 10.0] 2: [95.0, 85.18, 50.0, 8.0] у меня 10 000 строк похожих списков. Я хочу создать столбец значений следующим образом:

 0: 1009087416 1: 9887845410 2: 958518508
 

и так далее.

Есть ли простой способ добиться этого? Любая помощь будет принята с благодарностью.

Комментарии:

1. вы имеете в виду фрейм данных panda или просто список python?

2. Вам нужно опубликовать образец вашего фактического фрейма данных, это слишком неоднозначно

Ответ №1:

Если вы имеете в виду Dataframe! Простой способ, в данном случае, вас можно использовать так. Я думаю, что это не лучший способ, но он простой.

 def combine_data(data):
   # do combine your column here

df[colname] = df[colname].apply(lambda row: combine_data(row.colname), axis=1)
 

Ответ №2:

Все еще изучаю себя, хотя я знаю, что не самое лучшее перебирать фрейм данных, тем более, что вы упомянули 10 000 строк, но это то, что вам было нужно? Или, по крайней мере, укажет вам правильное направление…

 def convertToStr(value):
  s = str(value)
  return(s.replace(".0","").replace(".",""))

df = pd.DataFrame({'0':[100.0, 90.8, 74.0, 16.0],'1': [98.0, 87.84, 54.0, 10.0],'2': [95.0, 85.18, 50.0, 8.0]})
ColumnValues = {}

numberOfColumns = len(df.columns)
for i in range(numberOfColumns):
  tmp = ""
  columnList = df.iloc[:,i]
  for value in columnList:
    tmp = tmp   convertToStr(value)
  ColumnValues[i] = tmp

print(ColumnValues)
 

Ответ №3:

Поскольку структура неясна, я предполагаю две структуры. (Обратитесь за помощью к комментариям в коде)

Если ваш набор данных,

                            0
0  [100.0, 90.8, 74.0, 16.0]
1  [98.0, 87.84, 54.0, 10.0]
2   [95.0, 85.18, 50.0, 8.0]
 

Следующий код,

 import pandas as pd

lst = ['[100.0, 90.8, 74.0, 16.0]', '[98.0, 87.84, 54.0, 10.0]', '[95.0, 85.18, 50.0, 8.0]']

df = pd.DataFrame(lst)
print(df)

for index, row in df.iterrows():
    convertedstring = (" ".join(map(str, eval(row[0])))) #convert row[0] to list object and use join to convert to string
    cleanedstring = convertedstring.replace(".0", " ").replace(".", " ").replace(" ", "")  #remove .0 first for differentiation, remove , amp; remove spaces
    df = df.replace(row[0],cleanedstring)

print(df)
 

Дает вам,

             0
0  1009087416
1  9887845410
2   958518508
 

ИЛИ, если ваша структура данных следующая,

                                                    0
0  0: [100.0, 90.8, 74.0, 16.0] 1: [98.0, 87.84, ...
 

Затем следующий код,

 import pandas as pd

lst = ['0: [100.0, 90.8, 74.0, 16.0] 1: [98.0, 87.84, 54.0, 10.0] 2: [95.0, 85.18, 50.0, 8.0]']

df = pd.DataFrame(lst)
print(df)

d = "]"    #stated delimiter
for index, row in df.iterrows():
    s =  [e d for e in row[0].split(d) if e]  #split by ] without removing delimiter
    count = 0
    fullstring = ''
    for items in s:
        convertedstring = (" ".join(map(str, eval((items.split(':'))[1]))))    #same as previous
        cleanedstring = convertedstring.replace(".0", " ").replace(".", " ").replace(" ", "")     #same as previous
        fullstring  = str(count)   ": "   cleanedstring   " "    #reconstruct the string and save
        count  = 1
    df = df.replace(row[0],fullstring)

print(df)
 

Дает вам,

                                            0
0  0: 1009087416 1: 9887845410 2: 958518508 
 

Ответ №4:

Допустим, фрейм данных, как показано ниже:

 import pandas as pd
import numpy as np

df = pd.DataFrame({'0': [100.0, 90.8, 74.0],
                   '1': [98.0, 87.84, 54.0],
                   '2': [95.0, 85.18, 50.0]})
print(df)

# result as below:
       0      1      2
0  100.0  98.00  95.00
1   90.8  87.84  85.18
2   74.0  54.00  50.00
 

Результат:

             0           1           2
0  1000908740  9808784540  9508518500
 

Шаг за шагом:

 LIST = []
for col in df.columns.tolist():
    a = df[col].values.astype(str).tolist()
    LIST.append(''.join(a))
# LIST : 
> ['100.090.874.0', '98.087.8454.0', '95.085.1850.0']

new_array = np.array(LIST).reshape(1, -1)
# convert 1d list to 2d array. 
> [['100.090.874.0' '98.087.8454.0' '95.085.1850.0']]

dfnew = pd.DataFrame(new_array)
>                0              1              2
> 0  100.090.874.0  98.087.8454.0  95.085.1850.0

dfnew.replace('.', '', regex=True)
# replace dot
>             0           1           2
> 0  1000908740  9808784540  9508518500