#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