#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.