当前位置: 首页 > 知识库问答 >
问题:

python csv复制列

慕容宏邈
2023-03-14

我有一个包含以下内容的文件

first_name,last_name,uid,email,dep_code,dep_name
john,smith,jsmith,jsmith@gmail.com,finance,21230
john,king,jking,jjing@gmail.com,human resource,31230

我想复制“email”列并创建一个新列“email2”,然后将gmail.com从email2列替换为hotmail.com

我是python新手,所以需要专家的帮助,我尝试了一些脚本,但如果有更好的方法,请告诉我。原始文件包含60000行。

with open('c:\\Python27\\scripts\\colnewfile.csv', 'rb') as fp_in1, open('c:\\Python27\\scripts\\final.csv', 'wb') as fp_out1:
    writer1 = csv.writer(fp_out1, delimiter=",")
    reader1 = csv.reader(fp_in1, delimiter=",")
    domain = "@hotmail.com"
    for row in reader1:
        if row[2:3] == "uid":
            writer1.append("Email2")
        else:
            writer1.writerow(row+[row[2:3]])

这是最终脚本,唯一的问题是它没有完成整个输出文件,它只显示61409行,而在输入文件中有61438行。

inFile='c:\Python27\scripts\in-093013.csv'outFile='c:\Python27\scripts\final.csv'

使用open(infle,'rb')作为fp_-in1,open(outFile,'wb')作为fp_-out1:writer=csv.writer(fp_-out1,delimiter=“,”)reader=csv.reader(fp_-in1,delimiter=“,”)作为col-in-reader:del-col[6:]writer.writerow(col)headers=next(reader)writer)writerow(headers['email2'])作为行中的行:if-len(行)

共有2个答案

家经纶
2023-03-14

这可以用熊猫非常干净地完成。在这里,它去:

In [1]: import pandas as pd

In [3]: df = pd.read_csv('your_csv_file.csv')

In [4]: def rename_email(row):
   ...:     return row.email.replace('gmail.com', 'hotmail.com')
   ...:

In [5]: df['email2'] = df.apply(rename_email, axis=1)

In [6]: """axis = 1 or ‘columns’: apply function to each row"""

In [7]: df
Out[7]:
  first_name last_name     uid             email        dep_code  dep_name              email2
0       john     smith  jsmith  jsmith@gmail.com         finance     21230  jsmith@hotmail.com
1       john      king   jking   jjing@gmail.com  human resource     31230   jjing@hotmail.com

In [8]: df.to_csv('new_update_email_file.csv')
傅阿苏
2023-03-14

如果在读卡器上调用next(),一次只能得到一行;用它来复制标题。复制电子邮件列非常简单:

import csv

infilename = r'c:\Python27\scripts\colnewfile.csv'
outfilename = r'c:\Python27\scripts\final.csv'

with open(infilename, 'rb') as fp_in, open(outfilename, 'wb') as fp_out:
    reader = csv.reader(fp_in, delimiter=",")
    headers = next(reader)  # read first row

    writer = csv.writer(fp_out, delimiter=",")
    writer.writerow(headers + ['email2'])

    for row in reader:
        if len(row) > 3:
            # make sure there are at least 4 columns
            email = row[3].split('@', 1)[0] + '@hotmail.com'
        writer.writerow(row + [email])

此代码在第一个@符号上拆分电子邮件地址,取拆分的第一部分,并在其后面添加@hotmail.com

>>> 'example@gmail.com'.split('@', 1)[0]
'example'
>>> 'example@gmail.com'.split('@', 1)[0] + '@hotmail.com'
'example@hotmail.com'

以上产生:

first_name,last_name,uid,email,dep_code,dep_name,email2
john,smith,jsmith,jsmith@gmail.com,finance,21230,jsmith@hotmail.com
john,king,jking,jjing@gmail.com,human resource,31230,jjing@hotmail.com

对于您的示例输入。

 类似资料:
  • cp(copy),可以复制指定的文件与目录。 cp 要复制的源 复制到的目标 练习:复制文件 复制一份 ninghao-project 下面的 README.md ,放到 ninghao-project/app 这个目录的下面。 cp ninghao-project/README.md ninghao-project/app/ 练习:复制目录 要复制一个目录连同它里面包含的所有文件与子目录,需

  •  说明 调用方法: $.f2e.util.clip(text,message) 插件说明: 复制文字,现只支持IE 参数说明: 参数名 类型 说明 备注 text string 复制的文本内容 无 message string 复制成功后的提示文案 可不传 默认文案 复制成功 类绑定 <html> //复制 <a class="f2e-util-clip" data-text="

  • 我想在POI中使用OPCPackage和XSSFWorkbook打开一个excel文件。由于这个文件将在不同的线程中使用,我想避免重新打开该文件以节省时间(POI在打开一个xlsx文件时速度较慢)。所以我所做的是将工作簿保存在一个全局变量中,然后线程将访问这个全局变量并重用对象。 我遇到的问题是当我尝试重用对象时,它影响/修改了excel文件的原始数据。

  • 我需要创建一个按钮,当我点击它时,我复制一个我正在使用的特定链接。js 这是我的按钮 当我点击这个按钮时,我需要剪贴板上有类似“https::/google.com”的内容

  • 我有一个这样的数据帧。 现在,我想将第1列中的dict扩展到如下所示的各个列。 有没有捷径可以实现这一点?

  • 我正在创建一个使用 RestAPI 获取数据的应用程序,对于该操作,我使用改造 2、okhttp3 和 Jackson 将 json 解析为对象,我的应用程序还使用 Firebase 云消息传递 当我编译我的代码时,它会给我以下错误 错误:任务执行失败:app:transformresourceswithmergejavarefordebug。 com . Android . build . AP

  • 问题内容: 我应该使用MySQL复制来同步本地数据库和远程数据库吗?如果是这样,我该如何设置主机和从机?还有其他方法可以做到这一点吗? 问题答案: 如何设置主/从? 此复制:如何指导同时具有您需要在主服务器和从服务器上进行的操作。 任何其他可用于执行此操作的方法 还有MySQL群集的多主复制和循环复制。

  • 主要内容:为什么使用复制,复制的工作方式,设置副本集,将成员添加到副本集MongoDB 中的复制就是跨多个服务器同步数据的过程,复制提供了数据的冗余备份,在多个服务器中存储数据副本,以此来提高数据的可用性,并可以保证数据的安全性。另外,复制还可以防止数据丢失,因为复制允许您从硬件故障或服务中断的过程中恢复数据。 为什么使用复制 下面列举了几个使用复制的好处: 确保您数据的安全; 保障数据的高可用性; 数据恢复; 维护过程无需停机(例如备份、索引重建、压缩); 分布式读