鱼C论坛

 找回密码
 立即注册
查看: 1603|回复: 16

[已解决]要怎样设置才能出现Data列和Nino12列这样的形式呢?

[复制链接]
发表于 2020-6-27 09:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(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
……
最佳答案
2020-6-27 09:41:15
本帖最后由 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[1].iteritems():
            if each[0] == 'Year':
                year += str(each[1])[:-2]
                continue
            f.write(year+'-{:02}-01,{}\n'.format(month,each[1]))
            month += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-27 09:41:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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[1].iteritems():
            if each[0] == 'Year':
                year += str(each[1])[:-2]
                continue
            f.write(year+'-{:02}-01,{}\n'.format(month,each[1]))
            month += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-27 10:42:59 | 显示全部楼层

可以可以,太感谢了!还想问一下如果只读成下面的Data和Nino12但不写入txt文件需要怎么设置代码呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 10:47:35 | 显示全部楼层
艾依古 发表于 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[1].iteritems():
        if each[0] == 'Year':
            year += str(each[1])[:-2]
            continue
        print(year+'-{:02}-01,{}'.format(month,each[1]))
        month += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-27 14:48:40 | 显示全部楼层

太谢谢啦!只是目前没有学过iterrows(), iteritems()这两个函数,所以不太看得懂后面几行代码的意思,可以麻烦解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 15:12:14 | 显示全部楼层
艾依古 发表于 2020-6-27 14:48
太谢谢啦!只是目前没有学过iterrows(), iteritems()这两个函数,所以不太看得懂后面几行代码的意思,可以 ...


iterrows()  生成个以数据的行迭代的迭代器

iteritems()  生成个以字典数据项为迭代的迭代器,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 17:03:40 | 显示全部楼层
Twilight6 发表于 2020-6-27 15:12
iterrows()  生成个以数据的行迭代的迭代器

iteritems()  生成个以字典数据项为迭代的迭代器,

好滴,非常感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-27 17:06:15 | 显示全部楼层

问题解决,记得设置下最佳哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-27 17:20:05 | 显示全部楼层
好滴!可以再麻烦帮我看一下刚刚求助的一道题目吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-28 09:24:57 | 显示全部楼层

可以麻烦解释一下这几行代码的意思吗?
year = ''
for each in i[1].iteritems():
if each[0] == 'Year':
year += str(each[1])[:-2]
f.write(year+'-{:02}-01,{}\n'.format(month,each[1]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 09:28:00 | 显示全部楼层
艾依古 发表于 2020-6-28 09:24
可以麻烦解释一下这几行代码的意思吗?
year = ''
for each in i[1].iteritems():

year = ''
用来记录这次循环到的是几几年 每次外部 for 循环 year 都要重置

year += str(each[1])[:-2]  用来把年份切下来,你可以在前面加个print 观察下就知道为什么要这样切

f.write(year+'-{:02}-01,{}\n'.format(month,each[1])) 这个就是写入文件了 红色部分是格式化 2 个宽度,如果宽度不够用 0 来补充



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-28 09:49:17 | 显示全部楼层
Twilight6 发表于 2020-6-28 09:28
year = ''
用来记录这次循环到的是几几年 每次外部 for 循环 year 都要重置

好滴,谢谢!那这个i[1]、each[1]、[:-2]是表示什么啊?为什么换行符\n前面还有个{}呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 09:52:21 | 显示全部楼层
艾依古 发表于 2020-6-28 09:49
好滴,谢谢!那这个i[1]、each[1]、[:-2]是表示什么啊?为什么换行符\n前面还有个{}呢?

你在循环前面试着打印下 i  你会发现第一个参数是 index 的值,第二个才是这一行的内容

each 也是同理,你都拿去打印下就能明白为什么这样写

[:-2] 是字符串切片操作,相当于去掉结尾的两个字符

换行符是因为需要换行,否则数据全在一行,而前面的 {} 括号是 format 格式化的用法,对应后面的参数替换这个括号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-28 10:10:37 | 显示全部楼层
哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-28 10:27:56 | 显示全部楼层
Twilight6 发表于 2020-6-28 09:52
你在循环前面试着打印下 i  你会发现第一个参数是 index 的值,第二个才是这一行的内容

each 也是同理 ...


哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-28 10:28:46 | 显示全部楼层
艾依古 发表于 2020-6-28 10:27
哦哦,那为什么不加[:-2]得到的结果后面1872.0-03-01,-1.02会有.0呢?csv文件里面Year列里面没有.0啊?
[:-2] 是字符串切片操作,相当于去掉结尾的两个字符


这句话就是说明了呀...把 .0 去掉了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-28 10:37:18 | 显示全部楼层
Twilight6 发表于 2020-6-28 10:28
这句话就是说明了呀...把 .0 去掉了

好滴,那我可以再问一下昨天另外一题中if num_times[i][0] == 'LaNina Temp' and num_times[i][1] >= 5: 这个num_times[i][0]的意思,和sumIndex += num_times[i - 1][1]的意思吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 05:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表