Python 如何将csv文件中的数据保存到阵列?
我正在尝试使用csv模块读取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
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::]
,它删除了标题的空字段。