csv 如何将各行的内容作为一个元素移动到下一行?

0s0u357o  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(109)

我有一个文本文件中的数据,例如:

CCDPA_ABUSE_INCIDENT_CODES
1|CODE|VARCHAR2 (1)|Y
2|DESCR|VARCHAR2 (40)|Y
CCDPA_ADULT_PS_INVESTIGATIONS
1|ID|NUMBER (10,0)|Y
2|CCDPACHRAPP_ID|NUMBER (10,0)|Y
CCDPA_APPLICANT_ALIASES
1|ID|NUMBER (10,0)|Y
2|CCDPACHRAPP_ID|NUMBER (10,0)|Y

我将它导入Python,我需要让我的脚本做以下事情:

  • 字符串中以字母字符开头的每一行都需要在后面的行前加上前缀,只要这些行以数字开头,直到下一行以字母字符开头
  • 我需要一个管道字符(|)插入在前置字符串之后,将其与该行的其余部分分开
  • 需要删除以字母字符开头的原始行。

完成后,数据集应如下所示:

CCDPA_ABUSE_INCIDENT_CODES|1|CODE|VARCHAR2 (1)|Y
CCDPA_ABUSE_INCIDENT_CODES|2|DESCR|VARCHAR2 (40)|Y
CCDPA_ADULT_PS_INVESTIGATIONS|1|ID|NUMBER (10,0)|Y
CCDPA_ADULT_PS_INVESTIGATIONS|2|CCDPACHRAPP_ID|NUMBER (10,0)|Y
CCDPA_APPLICANT_ALIASES|1|ID|NUMBER (10,0)|Y
CCDPA_APPLICANT_ALIASES|2|CCDPACHRAPP_ID|NUMBER (10,0)|Y

最终的产品应该导出为.CSV格式,然后导入到Excel中。我不知道是应该使用pandas dataframe,还是将其保存为文本文件。我该如何完成?

yizd12fk

yizd12fk1#

以下是其中一个选项:

df = pd.read_fwf("file.txt", header=None)
​
m = df[0].str[0].str.isalpha() #is the row starts with an alphabetic ?
​
out = df.assign(tmp=df[0].where(m).ffill()).loc[~m][["tmp", 0]].agg("|".join, axis=1)

#out.to_excel("output.xlsx", header=False, index=False) #uncomment to make a spreadsheet

输出:

print(out)

1                  CCDPA_ABUSE_INCIDENT_CODES|1|CODE|VARCHAR2 (1)|Y
2                CCDPA_ABUSE_INCIDENT_CODES|2|DESCR|VARCHAR2 (40)|Y
4                CCDPA_ADULT_PS_INVESTIGATIONS|1|ID|NUMBER (10,0)|Y
5    CCDPA_ADULT_PS_INVESTIGATIONS|2|CCDPACHRAPP_ID|NUMBER (10,0)|Y
7                      CCDPA_APPLICANT_ALIASES|1|ID|NUMBER (10,0)|Y
8          CCDPA_APPLICANT_ALIASES|2|CCDPACHRAPP_ID|NUMBER (10,0)|Y

相关问题