我是Python的初学者,想清理csv文件以进行分析。但是,我面临着代码问题。
def open_dataset(file_name):
opened_file = open(file_name)
read_file = reader(opened_file, delimiter=",")
data = list(read_file)
return data
def column(filename):
filename = open_dataset(filename)
for row in filename:
print(row)
使用上面的代码,输出类似于
['Name;Product;Sales;Country;Website']
[';Milk;30;Germany;something.com']
[';;;USA;']
['Chris;Milk;40;;']
我希望获得以下输出:
['Name','Product','Sales','Country','Website']
[NaN,'Milk','30','Germany','something.com']
[NaN,NaN,NaN,'USA',NaN]
['Chris','Milk',40,NaN,NaN]
我将定界符定义为“,”,但仍为“;”用过的。我不知道为什么会这样。另外,即使我尝试用“ NaN”替换该空格,但仍然每个空格都被“ NaN”替换。
如果有人可以给我提示,将不胜感激
毕竟,我想分析每一列,例如“ NaN”的百分比等。
谢谢!
答案 0 :(得分:0)
您需要指定正确的定界符:
read_file = reader(opened_file, delimiter=";")
您的CSV文件似乎使用的是分号而不是逗号,因此您需要告诉reader()
使用什么。
提示:
filename = open_dataset(filename)
不要重新分配变量以表示其他含义。在执行此行之前,filename
是一个字符串,其中包含要打开的文件的名称。完成此分配后,filename
现在是文件中的行列表。请改用其他变量名:
rows = open_dataset(filename)
现在,这两个变量是不同的,它们的含义在名称中也很清楚。当然,可以随意使用rows
以外的filename
以外的其他东西。
答案 1 :(得分:0)
您可以通过以下方式获得所需的结果:
以下是一些示例代码:
import csv
def row_factory(row):
return [x if x != '' else 'NaN' for x in row]
with open(filename, 'r', newline='') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
print(row_factory(row))
输出:
['Name', 'Product', 'Sales', 'Country', 'Website']
['NaN', 'Milk', '30', 'Germany', 'something.com']
['NaN', 'NaN', 'NaN', 'USA', 'NaN']
['Chris', 'Milk', '40', 'NaN', 'NaN']
答案 2 :(得分:-1)
您可能想研究使用熊猫。它可以简化数据处理,甚至可以读取多种文件格式。
如果您想阅读csv:
import pandas as pd:
my_file = '/pat/to/my_csv.csv'
pd.read_csv(my_file)
答案 3 :(得分:-2)
这是因为列表仅包含一个元素,并且该元素是单个字符串,为了将字符串解析为列表,您可以将其拆分。
这应该可以满足您的需求
for row in filename:
parsed_row = row[0].split(';')
for i in range(0, len(parsed_row)):
if parsed_row[i] == '':
parsed_row[i] = None
print(parsed_row)
我给你一个Repl.it example