#python #python-3.x #list #python-2.7 #csv
Вопрос:
Я хочу вставить значения из списка на основе условия,
Например, пожалуйста, найдите ниже мой алгоритм кода с использованием CSV
модуля.
out_file = open("c://Project//in.csv", "w") header = ['List','Integer', 'Float', 'String'] l = [[4,5], 12, 2.4, "This is a string", [1,2], 45, ["Second String"]] writer = csv.writer(out_file) insert_header_in_the_beginning for i in l: if check_first_element_is_list_using_regex: insert_in_first_column_of_first_row(i) elif check_second_element_is_integer_using_regex: insert_in_second_column_of_first_row(i) elif check_third_element_is_float_using_regex: insert_in_third_column_of_first_row(i) elif check_last_element_is_string_using_regex: insert_in_last_column_of_first_row(i) new_row_starts
Желаемый Результат
List Integer Float String [4,5] 12 2.4 This is a String [1,2] 45 None Second String .....
Комментарии:
1. Я понимаю, что это псевдокод, но я не понимаю очевидного намерения использовать RE для анализа содержимого списка. Вы можете это объяснить? Кроме того, пожалуйста, покажите, как должен выглядеть ваш ожидаемый результат (содержимое CSV-файла) с учетом ваших выборочных данных
2. @BrutusForcus использовал RE для распознавания элемента, является ли он символом Char, Int или десятичным. На самом деле здесь я просто показал простейший пример, однако список в реальном коде имеет сложный шаблон. И да, я обновил желаемый результат в своем вопросе. Спасибо.!
Ответ №1:
Петля-не самая лучшая идея. У вас есть два лучших варианта : вы можете использовать np.select с двумя списками условий, такими значениями :
condlist = [xlt;3, xgt;5] choicelist = [x, x**2] np.select(condlist, choicelist)
Чтобы облегчить решение вашей проблемы :
import pandas as pd liste_of_Liste = [] liste_of_Integer = [] liste_of_Float = [] liste_of_String = [] l = [[4,5], 12, 2.4, "This is a string", [1,2], 45, ["Second String"]] for i in l: if type(i) is list: liste_of_Liste.append(i) elif type(i) is int: liste_of_Integer.append(i) elif type(i) is float: liste_of_Float.append(i) else: liste_of_String.append(i)
Тогда ваши массивы не имеют одинаковой длины, я сделал это в строках, но вы можете заполнить их значениями NaN, если хотите :
your_dictionnary = { 'List' : liste_of_Liste, 'Integer' : liste_of_Integer, 'Float' : liste_of_Float, 'String' : liste_of_String } df = pd.DataFrame.from_dict(your_dictionnary, orient="index") print(df)
Комментарии:
1. Привет, спасибо за ответ. Можете ли вы предоставить мне решение, основанное на данных, которые я упомянул в вопросе ?
2. Я отредактировал более простым способом, скажите мне, все ли в порядке