我有csv文件,其中列数不是常量。对于每一列,我试图将该列中的所有值存储到一个单独的列表中,以便我可以计算重复值的数量。我已经编写了一些代码来执行此操作但是,它似乎不会append
进入列表中。
示例输入为love hurt hit
。
我的输入是一个csv文件,其中包含可变数量的行和可变数量的列。它不断更改为不同的csv文件。假设一个文件有3列,下一个文件有20列。是和否是所有这些列下的值。这些值的出现是随机的。我想要做的是提取每个列中的所有值,并将它们附加到列表中。因此,一旦我退出for循环,我理想地希望看到给定列中的所有值;不是最后一个值,也不是每个值都打印在另一个之下。
当我追加所有值时,['love', 'yes' 'no', 'yes' ......]
应该是yes
,其中no
和love
是['love']
列下的值。
相反,我将每个值打印在一个新行上,例如:
['yes']
a,b,c = [],[],[]
headings = []
allCols = []
def getColCount(currLine):
return len(currLine)
# Open the file and read it
with open(filename1, 'r') as f1:
csvlines = csv.reader(f1, delimiter=',')
for lineNum, line in enumerate(csvlines):
colCount = getColCount(line)
allCols = [[] for x in range(0, colCount)]
a.append(line[0]) # this prints like I want it to - in series
for i in range(0, colCount):
allCols[i].append(line[i]) # this doesn't
print ','.join(allCols[2])
...
这是我到目前为止所拥有的。请帮忙!
{{1}}
答案 0 :(得分:2)
如果要交换行和列,zip
很有用。一个简单的例子:
>>> data = [["a", "b", "c"], # header row
[1, 2, 3], # data rows
[4, 5, 6],
[7, 8, 9]]
>>> swap = list(zip(*data))
>>> print(swap)
[('a', 1, 4, 7), # first column
('b', 2, 5, 8), # second column
('c', 3, 6, 9)] # third column
请注意,按the docs:
返回的列表的长度被截断为最短参数序列的长度。
答案 1 :(得分:0)
您需要做的是将行拆分为每个单词的数组,然后将其添加到列表中。假设您的文件是'data.csv'。
您可以做的是阅读文件:
finalData = []
fileHandler = open('data.csv', r)
#Read the lines from the file
for line in fileHandler.readlines():
#Split the line by comma
lineArr = line.split(',')
for i in range(len(lineArr)):
#Strip any whitespace from the lines
lineArr[i] = lineArr[i].replace(" ", "")
#Add the data to the final array
finalData.append(lineArr)
这是一种非常简单的方法,可以满足您的需求。
答案 2 :(得分:0)
另一种方法是使用熊猫。它的read_csv功能应该直接将它拆分成列,然后总结起来应该是非常简单的(每列上的collections.Counter)。
答案 3 :(得分:0)
如何使用词典来跟踪所有内容。
import csv
columns_and_values = {}
with open('my_file') as f1:
csvlines = csv.reader(f1)
for line in csvlines:
line_index_counter = 1
for value in line:
column_value_combo = str(line_index_counter)+"|"+value
if column_value_combo in columns_and_values.keys():
columns_and_values[column_value_combo]+=1
else:
columns_and_values[column_value_combo]=1
line_index_counter += 1
from pprint import pprint
pprint(columns_and_values)