要怎样设置才能出现Data列和Nino12列这样的形式呢?
(csv文件)如下图所示。Year January February March April May June July August September October November December
1870 -1.5 -0.96 -0.65 -0.32 -0.64 -0.96-0.98 -1.02 -1.02 -1.53 -1.42 -1.25
1871-0.74 -0.56 -0.78 -0.59 -0.76 -0.25 -0.34 -0.3 -0.35 -0.15 -0.37 -1.04
1872-1.18 -1.25 -1.02 -0.7 -0.75 -0.6 -0.7 -0.83 -0.66 -0.87 -0.63 -0.83
……
【任务】用 pandas 库读取“nino12.long.anom.data.csv”文件,将所有时间抽取为单独
的列 Date(形式为 YYYY-MM-01),所有异常平均值抽取为一个单独的列
Nino12,将所有缺失值丢弃处理,并导出到新的 txt 文件
“nino12_dropnan.txt”,第一行为表头,列名分别为 Date 和 Nino12,且表
头和数据行中的不同字段信息都是用逗号分割,如下图所示
Data Nino12
1870-01-01 -1.5
1870-02-01 -0.96
1870-03-01 -0.65
1870-04-01 -0.32
1870-05-01 -0.64
…… 本帖最后由 Twilight6 于 2020-6-27 09:51 编辑
这样可否?
import pandas as pd
dp = pd.read_csv('nino12.long.anom.data.csv')
with open('nino12_dropnan.txt','w') as f:
f.write('Data,Nino12\n')
for i in dp.iterrows():
month = 1
year = ''
for each in i.iteritems():
if each == 'Year':
year += str(each)[:-2]
continue
f.write(year+'-{:02}-01,{}\n'.format(month,each))
month += 1
Twilight6 发表于 2020-6-27 09:41
这样可否?
可以可以,太感谢了!还想问一下如果只读成下面的Data和Nino12但不写入txt文件需要怎么设置代码呢? 艾依古 发表于 2020-6-27 10:42
可以可以,太感谢了!还想问一下如果只读成下面的Data和Nino12但不写入txt文件需要怎么设置代码呢?
改成 print 就好了
import pandas as pd
dp = pd.read_csv('nino12.long.anom.data.csv')
print('Data,Nino12')
for i in dp.iterrows():
month = 1
year = ''
for each in i.iteritems():
if each == 'Year':
year += str(each)[:-2]
continue
print(year+'-{:02}-01,{}'.format(month,each))
month += 1
Twilight6 发表于 2020-6-27 10:47
改成 print 就好了
太谢谢啦!只是目前没有学过iterrows(), iteritems()这两个函数,所以不太看得懂后面几行代码的意思,可以麻烦解释一下吗? 艾依古 发表于 2020-6-27 14:48
太谢谢啦!只是目前没有学过iterrows(), iteritems()这两个函数,所以不太看得懂后面几行代码的意思,可以 ...
iterrows()生成个以数据的行迭代的迭代器
iteritems()生成个以字典数据项为迭代的迭代器,
Twilight6 发表于 2020-6-27 15:12
iterrows()生成个以数据的行迭代的迭代器
iteritems()生成个以字典数据项为迭代的迭代器,
好滴,非常感谢~ 艾依古 发表于 2020-6-27 17:03
好滴,非常感谢~
问题解决,记得设置下最佳哈 好滴!可以再麻烦帮我看一下刚刚求助的一道题目吗? Twilight6 发表于 2020-6-27 09:41
这样可否?
可以麻烦解释一下这几行代码的意思吗?
year = ''
for each in i.iteritems():
if each == 'Year':
year += str(each)[:-2]
f.write(year+'-{:02}-01,{}\n'.format(month,each))
艾依古 发表于 2020-6-28 09:24
可以麻烦解释一下这几行代码的意思吗?
year = ''
for each in i.iteritems():
year = ''
用来记录这次循环到的是几几年 每次外部 for 循环 year 都要重置
year += str(each)[:-2]用来把年份切下来,你可以在前面加个print 观察下就知道为什么要这样切
f.write(year+'-{:02}-01,{}\n'.format(month,each)) 这个就是写入文件了 红色部分是格式化 2 个宽度,如果宽度不够用 0 来补充
Twilight6 发表于 2020-6-28 09:28
year = ''
用来记录这次循环到的是几几年 每次外部 for 循环 year 都要重置
好滴,谢谢!那这个i、each、[:-2]是表示什么啊?为什么换行符\n前面还有个{}呢? 艾依古 发表于 2020-6-28 09:49
好滴,谢谢!那这个i、each、[:-2]是表示什么啊?为什么换行符\n前面还有个{}呢?
你在循环前面试着打印下 i你会发现第一个参数是 index 的值,第二个才是这一行的内容
each 也是同理,你都拿去打印下就能明白为什么这样写
[:-2] 是字符串切片操作,相当于去掉结尾的两个字符
换行符是因为需要换行,否则数据全在一行,而前面的 {} 括号是 format 格式化的用法,对应后面的参数替换这个括号的 哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊? Twilight6 发表于 2020-6-28 09:52
你在循环前面试着打印下 i你会发现第一个参数是 index 的值,第二个才是这一行的内容
each 也是同理 ...
哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊? 艾依古 发表于 2020-6-28 10:27
哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊?
[:-2] 是字符串切片操作,相当于去掉结尾的两个字符
这句话就是说明了呀...把 .0 去掉了 Twilight6 发表于 2020-6-28 10:28
这句话就是说明了呀...把 .0 去掉了
好滴,那我可以再问一下昨天另外一题中if num_times == 'LaNina Temp' and num_times >= 5: 这个num_times的意思,和sumIndex += num_times的意思吗?
页:
[1]