Это вопрос из двух частей.
1) Я создаю таблицы данных на основе пользовательских данных, но есть ли способ спроектировать ваш код так, чтобы, если пользователь ничего не вводил, он не нарушал сценарий? И.Е.
A=input('some input\n')
B=input('some input\n')
df1=pd.read_csv(A, sep='\s+', header=None)
df2=pd.read_csv(B, sep='\s+', header=None)
# This works really well if you have inputs for A and B, but if you don't have an input for B, then you get the error that B is undefined
Я хотел бы создать какой-то цикл, так что если нет ввода, он просто пропускает его. И.Е.
A=input('some input\n')
if A has some input:
df1=pd.read_csv(A, sep='\s+', header=None)
else:
B=input('some input\n')
if B has some input:
df2=pd.read_csv(B, sep='\s+', header=None)
else:
Это однако сталкивается со вторым вопросом. 2) Позже я собираю эти таблицы (представьте, что я определил столбцы в приведенных выше таблицах данных).
df3=df1.loc[:,'Column_4']
df4=df2.loc[:,'Column_4']
df5=pd.concat([df3,df4],axis=1)
Так что если в приведенном выше цикле пользователь ничего не вводит для B, то вы не получите создание df2, что означает отсутствие df4. Теперь я могу также поместить df4 в цикл, чтобы не получить ошибку, df4 не определена, но это все равно оставит проблему для формирования df5, которую я не могу вставить ни в один из вышеприведенных циклов.
Наконец, просто в стороне, есть ли способ упростить этот процесс? В идеале я хотел бы позволить пользователю вводить, возможно, 10 или 20 входных данных, но это будет много строк кода для A = input (), B = input (), C = input () и каждого из них. входы с собственными строками pd.read и .loc действительно складываются (особенно, если я создаю условные циклы для каждого отдельного ввода).
1 ответ
Я не уверен, полностью ли я понял, что вы пытаетесь выполнить, но из информации в вашем посте я предполагаю, что вы вводите список путей к CSV-файлам, которые необходимо обработать. Я придумал этот сценарий, чтобы упростить процесс получения этих путей к файлам, разбора CSV-файлов в фреймы данных в список, взятия этих фреймов данных и извлечения столбца «Column_4», а затем их объединения в один окончательный фрейм данных. Просто введите пути к CSV-файлам, пока не закончите, а затем введите q, quit или done, и он будет работать с любыми указанными вами путями к файлам!
import pandas as pd
csv_file_paths = []
data_frames = []
column_4_frames = []
path_input = ''
print('Enter path to CSV file. When done, enter q, quit or done to stop.')
# collect file paths to be processed until q, quit or done is typed and entered
while True:
path_input = input()
if path_input.lower() not in ['q', 'quit', 'done']:
csv_file_paths.append(path_input)
else:
break
# create dataframes for each file, append them to a list
try:
for csv_file in csv_file_paths:
df = pd.read_csv(csv_file, sep='\s+', header=None)
data_frames.append(df)
except Exception as e:
# catch non-existing file error
print('Error loading file: '+str(e))
# collect "column 4"s from each dataframe that was read
for df in data_frames:
column_4_frames.append(df.loc[:,'Column_4'])
# concatenate all "column 4" dataframes into one
concatenated_df = pd.concat(column_4_frames, axis=1)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.