преобразовать серию pandas (со строками) в список python

#python #pandas #series #tolist

#python #pandas #Серии #tolist

Вопрос:

Возможно, это глупо, но, похоже, я не могу правильно преобразовать серию pandas, первоначально полученную из листа Excel, в список.

dfCI создается путем импорта данных из таблицы Excel и выглядит следующим образом:

 tab      var             val
MsrData  sortfield       DetailID
MsrData  strow           4
MsrData  inputneeded     "MeasDescriptionTest", "SiteLocTest", "SavingsCalcsProvided","BiMonthlyTest"     

# get list of cols for which input is needed
cols = dfCI[((dfCI['var'] == 'inputneeded') amp; (dfCI['tab'] == 'MsrData'))]['val'].values.tolist()
print(cols)

>> ['"MeasDescriptionTest", "SiteLocTest", "SavingsCalcsProvided", "BiMonthlyTest"']

# replace null text with text
invalid = 'Input Needed'
for col in cols:
   dfMSR[col] = np.where((dfMSR[col].isnull()), invalid, dfMSR[col])
 

Однако второй набор (одиночных) кавычек, добавленный, когда я преобразовал cols из series в list, делает все столбцы единым значением, так что

 col = '"MeasDescriptionTest", "SiteLocTest", "SavingsCalcsProvided", "BiMonthlyTest"'
 

Желаемый результат для cols

 cols = ["MeasDescriptionTest", "SiteLocTest", "SavingsCalcsProvided", "BiMonthlyTest"]
 

Что я делаю не так?

Ответ №1:

Как только вы это сделаете col , вы можете преобразовать его в ожидаемый результат:

 In [1109]: col = '"MeasDescriptionTest", "SiteLocTest", "SavingsCalcsProvided", "BiMonthlyTest"'

In [1114]: cols = [i.strip() for i in col.replace('"', '').split(',')]

In [1115]: cols
Out[1115]: ['MeasDescriptionTest', 'SiteLocTest', 'SavingsCalcsProvided', 'BiMonthlyTest']
 

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

1. Спасибо Mayank, это сработало. Однако можно ли избежать одинарных кавычек, чтобы мне не приходилось выполнять этот дополнительный шаг? У меня есть контроль над тем, как я ввожу данные в Excel. В настоящее время он вводится как: «MeasDescriptionTest», «SiteLocTest», «SavingsCalcsProvided», «BiMonthlyTest»

Ответ №2:

Другое возможное решение, которое приходит на ум cols , учитывая структуру:

 list(eval(cols[0]))  # ['MeasDescriptionTest', 'SiteLocTest', 'SavingsCalcsProvided', 'BiMonthlyTest']
 

Хотя это действительно, это менее безопасно, и я бы выбрал понимание списка, как предложил @MayankPorwal.