Я копирую выходные данные списка из курса DataCamp, чтобы я мог воссоздать упражнение в коде Visual Studio или Jupyter Notebook. В интерактивном окне DataCamp Python я набираю имя списка, выделяю вывод и вставляю его в новый файл в VSCode. Я использую поиск и замену, чтобы удалить все запятые и пробелы, и теперь у меня 142 числовых значения, и я сохраняю как life_exp.csv. Выглядит так:
43.828
76.423
72.301
42.731
75.32
81.235
79.829
75.635
64.062
79.441
Когда я считываю файл в VSCode, используя Pandas read_csv или csv.reader, и использую values.tolist () с Pandas или цикл for для добавления существующего, пустого списка, оба случая предоставляют мне список списков, который затем не отображается данные правильно, когда я пытаюсь создать гистограммы matplotlib.
Я использовал NotePad для сохранения данных, а также .csv, и оба способа сохранения данных приводят к одной и той же проблеме.
import matplotlib.pyplot as plt
import csv
life_exp = []
with open ('C:\data\life_exp.csv', 'rt') as life_expcsv:
exp_read = csv.reader(life_expcsv, delimiter = '\n')
for row in exp_read:
life_exp.append(row)
А также
import pandas as pd
life_exp_df = pd.read_csv('c:\\data\\life_exp.csv', header = None)
life_exp = life_exp_df.values.tolist()
Когда вы печатаете life_exp после импорта с использованием csv, вы получаете:
[['43.828'],
['76.423'],
['72.301'],
['42.731'],
['75.32'],
['81.235'],
['79.829'],
['75.635'],
['64.062'],
['79.441'],
['56.728'],
….
И когда вы печатаете life_exp после импорта с помощью pandas read_csv, вы получаете то же самое, но по крайней мере теперь это не строка:
[[43.828],
[76.423],
[72.301],
[42.731],
[75.32],
[81.235],
[79.829],
[75.635],
[64.062],
[79.441],
[56.728],
…
И когда вы вызываете plt.hist (life_exp) в любой версии списка, вы получаете каждое значение как bin из 1.
Я просто хочу прочитать каждое значение в CSV-файле и поместить каждое значение в простой список Python.
Я потратил дни на то, чтобы обыскивать стекопоток, думая, что кто-то это сделал, но не могу найти ответ. Я очень новичок в Python, поэтому ваша помощь очень ценится.
2 ответа
Пытаться:
import pandas as pd
life_exp_df = pd.read_csv('c:\\data\\life_exp.csv', header = None)
# Select the values of your first column as a list
life_exp = life_exp_df.iloc[:, 0].tolist()
Вместо того:
life_exp = life_exp_df.values.tolist()
С помощью csv reader он будет анализировать строку в списке, используя предоставленный вами разделитель. В этом случае вы предоставляете \n
в качестве разделителя, но он все равно возьмет этот единственный элемент и вернет его в виде списка.
Когда вы добавляете каждую строку, вы по существу добавляете этот список в другой список. Самый простой обходной путь - это индексирование в строку для извлечения этого значения.
with open ('C:\data\life_exp.csv', 'rt') as life_expcsv:
exp_read = csv.reader(life_expcsv, delimiter = '\n')
for row in exp_read:
life_exp.append(row[0])
Однако, если ваши данные не гарантированно отформатированы так, как вы их предоставили, вам нужно будет обработать это немного иначе:
with open ('C:\data\life_exp.csv', 'rt') as life_expcsv:
exp_read = csv.reader(life_expcsv, delimiter = '\n')
for row in exp_read:
for number in row:
life_exp.append(number)
Немного чище с пониманием списка:
with open ('C:\data\life_exp.csv', 'rt') as life_expcsv:
exp_read = csv.reader(life_expcsv, delimiter = '\n')
[life_exp.append(number) for row in exp_read for number in row]
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.