Как я могу получить количество вхождений в столбцах CSV и сохранить как новый CSV, содержащий количество в python - PullRequest
1 голос
/ 30 апреля 2020

Я новичок в python, я был бы очень признателен за помощь. Я пробовал ie весь день. У меня есть CSV-файл, содержащий 10 столбцов. Меня интересуют только 3 штата, округ и почтовый индекс. Я пытаюсь, пытаюсь и пытаюсь получить количество вхождений в каждом столбце, например, CA 20000, TX 14000, и получаю результат результата подсчета для сохранения в файлах CSV, которые можно легко импортировать в Excel и в дальнейшем объединить с геопространственными файлы.

Мне удалось выбрать 3 нужных мне столбца


import numpy as np

from tabulate import tabulate

import pandas as pd 


#Replace with path and name file in your computer
filename = "10column.csv"

# Enter the column number that you want to display between [, , ,] no space between the commas  "usecols=[3,4,5]" 
table = np.genfromtxt(filename,delimiter=',',skip_header=0,dtype='U',usecols=[4,5,6])

print(tabulate(table))

#Insert the path and name of the file 
pd.DataFrame(table).to_csv("3column.csv") 

Затем я попытался подсчитать вхождения, но вывод не в том формате, и я не могу сохранить их в формате csv.


import csv

from collections import Counter


import numpy as np

my_reader = csv.reader(open("3column.csv"))

#insert column number instead of the 2 "[rec[2]"
column = [rec[2] for rec in my_reader]

np.array([Counter(column)])

print(np.array([Counter(column)]))

результат

[Counter({'22209': 10, '20007': 5, …'})]

Я не могу сохранить его как CSV, и я хотел бы иметь в табличном формате

zip, count
22209, 10, 20007, 10

Я был бы очень признателен ваша помощь

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Другим способом подхода было бы использование value_counts() из Pandas документации .

Возвращение серии, содержащей количество уникальных значений.

Пример файла данных 7column.csv

id,state,city,zip,ip_address,latitude,longitude
1,NY,New York City,10005,246.78.179.157,40.6964,-74.0253
2,WA,Yakima,98907,79.61.127.155,46.6288,-120.574
3,OK,Oklahoma City,73109,129.226.225.133,35.4259,-97.5261
4,FL,Orlando,32859,104.196.5.159,28.4429,-81.4026
5,NY,New York City,10004,246.78.180.157,40.6964,-74.0253
6,FL,Orlando,32860,104.196.5.159,29.4429,-81.4026
7,IL,Chicago,60641,19.226.187.13,41.9453,-87.7474
8,NC,Fayetteville,28314,45.109.1.38,35.0583,-79.008
9,IL,Chicago,60642,19.226.187.14,41.9453,-87.7474
10,WA,Yakima,98907,79.61.127.156,46.6288,-120.574
11,IL,Chicago,60643,19.226.187.15,41.9453,-87.7474
12,CA,Sacramento,94237,77.208.31.167,38.3774,-121.4444
import pandas as pd

df = pd.read_csv("7column.csv")

zipcode = df["zip"].value_counts()
state = df["state"].value_counts()
city = df["city"].value_counts()

zipcode.to_csv('zipcode_count.csv')
state.to_csv('state_count.csv')
city.to_csv('city_count.csv')

Выходные файлы CSV

state_count.csv   |   city_count.csv      |  zipcode_count.csv
,state            |   ,city               |  ,zip
IL,3              |   Chicago,3           |  98907,2
NY,2              |   Orlando,2           |  32859,1
FL,2              |   New York City,2     |  94237,1
WA,2              |   Yakima,2            |  32860,1
NC,1              |   Sacramento,1        |  28314,1
OK,1              |   Fayetteville,1      |  10005,1
CA,1              |   Oklahoma City,1     |  10004,1
                  |                       |  60643,1
                  |                       |  60642,1
                  |                       |  60641,1
                  |                       |  73109,1
0 голосов
/ 30 апреля 2020

Вы можете прочитать файл, который вы записали в CSV, как DataFrame и использовать метод подсчета, который есть у Pandas.

states_3 = pd.DataFrame(table)

state_count = states_3.count(axis='columns')

out_name = 'statecount.xlsx'
with pd.ExcelWriter(out_name) as writer:
    state_count.to_excel(writer, sheet_name='counts')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...