Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将csv文件中的数据保存到阵列?_Python_Python 3.x_Csv - Fatal编程技术网

Python 如何将csv文件中的数据保存到阵列?

Python 如何将csv文件中的数据保存到阵列?,python,python-3.x,csv,Python,Python 3.x,Csv,我正在尝试使用csv模块读取csv文件。这是我的密码: import csv with open('test.csv') as csvfile: spamreader = csv.reader(csvfile, delimiter='|') daymoment = [row[0] for row in csv.reader(csvfile, delimiter='|') if row != ''][1::] day = [row[0] for row in spamre

我正在尝试使用csv模块读取csv文件。这是我的密码:

import csv

with open('test.csv') as csvfile:
    spamreader = csv.reader(csvfile, delimiter='|')
    daymoment = [row[0] for row in csv.reader(csvfile, delimiter='|') if row != ''][1::]
    day = [row[0] for row in spamreader]
print(daymoment)
print(day)
这是我的csv文件:

|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Morning|2|1|1|3|5|6|7
Afternoon|3|4|4|7|8|6|5
Evening|5|23|5|6|8|7|9
Night|6|1|4|2|6|4|7
但是我有以下问题:
day
中没有值。例如,我想要
[‘星期一’、‘2’、‘3’、‘5’、‘6’]

你能帮我吗


谢谢大家!

对于您的CSV文件,我修复了“下午”的一个拼写错误,并根据您的代码添加了一个新的专栏标题“daymoment”

Daymoment|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
Morning|2|1|1|3|5|6|7
Afternoon|3|4|4|7|8|6|5
Evening|5|23|5|6|8|7|9
Night|6|1|4|2|6|4|7
您可以读入csv文件,将其转换为熊猫数据帧,然后读取“周一”列以获得如下数据:

import csv
import pandasql as ps
import pandas as pd

with open('test.csv') as csvfile:
    spamreader = csv.reader(csvfile, delimiter='|')
    mydata = pd.DataFrame([x for x in spamreader])
    mydata.columns = mydata.iloc[0]
    mydata = mydata[1:]

print(mydata['Monday'])  
1    2
2    3
3    5
4    6  
如果我理解正确,您可能希望从数据中选择各个日期,并在不同的结构中获取它们的值。这需要使用sql(上面导入的)进行数据转换,如下所示:

transform_sql = """
select
Daymoment,
'Monday' as Day,
Monday as Daycount
from mydata
union all
select
Daymoment,
'Tuesday' as Day,
Tuesday as Daycount
from mydata
union all
select
Daymoment,
'Wednesday' as Day,
Wednesday as Daycount
from mydata
union all
select
Daymoment,
'Thursday' as Day,
Thursday as Daycount
from mydata
union all
select
Daymoment,
'Friday' as Day,
Friday as Daycount
from mydata
union all
select
Daymoment,
'Saturday' as Day,
Saturday as Daycount
from mydata
union all
select
Daymoment,
'Sunday' as Day,
Sunday as Daycount
from mydata
"""

print(ps.sqldf(transform_sql))  
    Daymoment        Day Daycount
0     Morning     Monday        2
1   Afternoon     Monday        3
2     Evening     Monday        5
3       Night     Monday        6
4     Morning    Tuesday        1
5   Afternoon    Tuesday        4
6     Evening    Tuesday       23
7       Night    Tuesday        1
8     Morning  Wednesday        1
9   Afternoon  Wednesday        4
10    Evening  Wednesday        5
11      Night  Wednesday        4
12    Morning   Thursday        3
13  Afternoon   Thursday        7
14    Evening   Thursday        6
15      Night   Thursday        2
16    Morning     Friday        5
17  Afternoon     Friday        8
18    Evening     Friday        8
19      Night     Friday        6
20    Morning   Saturday        6
21  Afternoon   Saturday        6
22    Evening   Saturday        7
23      Night   Saturday        4
24    Morning     Sunday        7
25  Afternoon     Sunday        5
26    Evening     Sunday        9
27      Night     Sunday        7  
现在,您只需从转换后的数据结构中选择所需的“日期”

print(transposed_data.loc[transposed_data['Day'] == 'Monday'])  
   Daymoment     Day Daycount
0    Morning  Monday        2
1  Afternoon  Monday        3
2    Evening  Monday        5
3      Night  Monday        6

csv阅读器逐行读取文件。当到达文件末尾时,读取器已耗尽,将不再返回任何内容。如果要多次处理,必须将行保留在数据结构中,例如列表:

with io.StringIO(t) as csvfile:
    spamreader = list(csv.reader(csvfile, delimiter='|'))
    daymoment = [row[0] for row in spamreader if row[0] != ''][1::]
    day = [row[1] for row in spamreader]

print(day)
print(daymoment)
给出:

['Monday', '2', '3', '5', '6']
['Afternoon', 'Evening', 'Night']

猜测:
[row[0]表示csv.reader中的行(csvfile,delimiter='''.'),如果row!='''.
读取了整个文件,那么
[row[0]表示spamreader中的行]
就没有数据了。请提供当前和预期的输出。只打开一次文件,但尝试读取两次。第二次,您已经在文件末尾,从中读取不会产生数据。您能否澄清
daymonent
day
的目的?既读取了
行[0]
,又读取了
daymonent
行!=''排除永远无法触发(
csv.reader
提供元组,而不是字符串)。唯一的区别是
[1::]
,它删除了标题的空字段。