Как вставить значения на основе условия в столбец в CSV-файле с помощью Python?

#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. Я отредактировал более простым способом, скажите мне, все ли в порядке