pandas 使用特定分隔符将值连接到一行中

mwngjboj  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(111)

我是个菜鸟,我正在尝试开发一些python工具。我不是一个开发者,但是我想/需要学习一些方便的编码。
背景说明:有时我们会得到一个CSV和一些填充的列。其中一列的值是我们需要执行DB搜索的引用ID。有时可能会有几行、几千行甚至几百万行。我们会手动将所需的列复制到文本编辑器(如Sublime)中,删除所有换行符,并插入分隔符',' between each value and an ' at the begin and end of the line.我们这样做是为了可以将它复制到SQL SELECT IN语句中(如果你在数据库上工作,你会很熟悉这一点).上述操作需要手动完成,而代码可以完成.
和我正在开发的其他一些python工具一样,它们都是围绕Pandas的,所以我希望这个工具能使用它们,尽管我也愿意接受其他建议。
解决方法:我把下面的代码组合在一起。它接受一个CSV并把它加载到一个dataframe中。我用argparse选择CSV和我想提取的列并进行处理。所需的列被提取到一个变量中,我用','替换行尾。除了行的开头和结尾之外,这和预期的工作方式基本一致,开头缺少一个',结尾有一个额外的,'范例:开头:1011 l792873442“、”1011 l792873443“、”1100 l789586969“结束日期:'1100l786697395','1100l786697396','1100l786697397','1100l786697397',
我想知道...
1.有没有更好的方法?
1.如何处理行首缺少的“”和行尾多出的"“?
编辑:源格式:抱歉,我无法在帖子中正确设置此内容的格式。活动标识,转换商品标识,状态1100 l327,1011 l792873442,已拒绝1100 l327,1011 l792873443,已拒绝1100 l327,1100 l789586969,已批准1100 l327,1100 l789586970,已拒绝
所需输出:(转换项目)'1011 l792873442'、'1011 l792873443'、'1100 l789586969'、'1100 l789586970'
欢迎建设性的批评。
谢谢你,

import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("-i", "--input", help="Source file")
parser.add_argument("-o", "--output", help="Output file")
parser.add_argument("-n", "--name", help="Provide the column name to format")
args = parser.parse_args()

df = pd.read_csv(args.input, usecols=[args.name])
df.to_csv(args.output, index=False, header=False)

# Read in the file

filename = (args.output)
with open(filename, 'r') as file:
  filedata = file.read()

# Replace the target string

filedata = filedata.replace("\n", "','")

# Write the file out again

with open(filename, 'w') as file:
    file.write(filedata)
    print(filedata)
uqzxnwby

uqzxnwby1#

你可以创建一个新的字符串,并将其赋值给你当前的字符串,在开头和结尾都用逗号,如下所示:
替换目标字符串

filedata = filedata.replace("\n", "','")

newfiledata = "," + filedata + ","

print(newfiledata)

注意:如果使用这种方法,那么每次在此更改之后提到filedata时,都应该调用newfiledata,因为它表示对变量filedata的最新更改
如果您不想创建新示例,可以执行以下操作:

filedata = "," + filedata + ","

我认为创建一个新的示例是一个很好的做法,因为无论出于什么原因,如果需要的话,它都可以更容易地返回到原始示例。

相关问题