首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Csv -插入缺少的行

Csv -插入缺少的行
EN

Stack Overflow用户
提问于 2012-10-10 04:37:13
回答 1查看 94关注 0票数 0

我有一个很大的文件,其中有一些缺失的行。数据需要扎根于国家/地区。

输入数据如下:

代码语言:javascript
复制
csv_str = """Type,Country,State,County,City,
1,USA,,,
2,USA,OH,,
3,USA,OH,Franklin,
4,USA,OH,Franklin,Columbus
4,USA,OH,Franklin,Springfield
4,USA,WI,Dane,Madison
"""

它需要是:

代码语言:javascript
复制
csv_str = """Type,Country,State,County,City,
1,USA,,,
2,USA,OH,,
3,USA,OH,Franklin,
4,USA,OH,Franklin,Columbus
4,USA,OH,Franklin,Springfield
4,USA,WI,,
4,USA,WI,Dane,
4,USA,WI,Dane,Madison
"""

根据我的逻辑,关键字是Type字段,如果我找不到城市(类型4)的县(类型3),那么插入一行字段,直到县。

县的情况也一样。如果我找不到某个县(类型3)的州(类型2),则插入一行,其中的字段最高可达State。

由于我不了解python中的工具,我尝试了更多的暴力方法。这有点问题,因为我需要在同一个文件上进行大量迭代。

我也尝试过google-refine,但不能让它工作。手动操作很容易出错。

感谢您的帮助。

代码语言:javascript
复制
import csv
import io

csv_str = """Type,Country,State,County,City,
1,USA,,,
2,USA,OH,,
3,USA,OH,Franklin,
4,USA,OH,Franklin,Columbus
4,USA,OH,Franklin,Springfield
4,USA,WI,Dane,Madison
"""
found_county =[]
missing_county =[]

def check_missing_county(row):
    found = False
    for elm in found_county:
        if elm.Type == row.Type:
            found = True
    if not found:
        missing_county.append(row)
        print(row)

reader = csv.reader(io.StringIO(csv_str))
for row in reader:
    check_missing_county(row)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 05:27:44

根据我对这个问题的理解,我总结出了以下几点:

代码语言:javascript
复制
import csv
import io

csv_str = u"""Type,Country,State,County,City,
1,USA,,,
2,USA,OH,,
3,USA,OH,Franklin,
4,USA,OH,Franklin,Columbus
4,USA,OH,Franklin,Springfield
4,USA,WI,Dane,Madison
"""

counties = []
states = []


def handle_missing_data(row):
    try:
        rtype = int(row[0])
    except ValueError:
        return []

    rtype = row[0]
    country = row[1]
    state = row[2]
    county = row[3]

    rows = []
    # if a state is present and it hasn't a row of it's own
    if state and state not in states:
        rows.append([rtype, country, state, '', ''])
        states.append(state)

    # if a county is present and it hasn't a row of it's own
    if county and county not in counties:
        rows.append([rtype, country, state, county, ''])
        counties.append(county)

    # if the row hasn't already been added add it now
    if row not in rows:
        rows.append(row)

    return rows

csvf = io.StringIO(csv_str)
reader = csv.reader(csvf)
for row in reader:
    new_rows = handle_missing_data(row)
    for new_row in new_rows:
        print new_row
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12808017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档