【问题标题】:list of lists not spilt correctly adding 2 items to appended dataframe列表列表未正确拆分添加 2 项以附加数据框
【发布时间】:2017-10-30 19:03:22
【问题描述】:

我正在尝试从从文件读取的列表列表中生成带有一列 url 的数据框。这就是我正在尝试的:

one_df= pd.DataFrame()
with open(r"product_Url.txt", 'r') as infile:
    l = [x.split(',') for x in infile]
    for x in zip(*l):
        df = pd.DataFrame(list(x), columns=['url'])
        one_df = one_df.append(df, ignore_index=True)
    print(one_df)
    one_df.to_csv(outfile)

我的输出的问题是我的输出中有几行有 2 个 url,看起来像这样(例如):

0, ['http://www.ex.com/prod1'
1, 'http://www.ex.com/prod2'
2, 'http://www.ex.com/prod3']['http://www.ex.com/prod25'
3, 'http://www.ex.com/prod43'['http://www.ex.com/prod99']

我从文件中读取的原始起始数据看起来像这样(但有更多的 url):

[" ['https://www.ex.com/prod1', 'https://www.ex.com/prod2','https://www.ex.com/prod3']['https://www.ex.com/prod2','https://www.ex.com/prod3']['https://www.ex.com/prod25,'https://www.ex.com/prod43']['http://www.ex.com/prod99']"]

当我尝试将其直接从文件读取到数据框中时,我得到了一个空数据框和每个 url 的一列。因此,我尝试使用循环生成数据框。

我需要做些什么来摆脱这些我有 2 个网址而不是每行 1 个网址的情况?

【问题讨论】:

  • 摆脱手段,你想跳过那些吗?
  • 我想将每个网址放在一行。而不是一行 2 个 url,每次出现其中一种情况时,url 应该分开到不同的行中。

标签: python-3.x pandas dataframe split


【解决方案1】:

这可能不是有效的方法,但查看您提供的以下示例可能会在 [] 被替换并创建 dataframe 时起作用:

one_df= pd.DataFrame()
with open("product_Url.txt", 'r') as infile:
    l = [x.replace(']', ',').replace("[",'').replace('"','').replace('\n','').strip().split(',') for x in infile]
    for x in zip(*l):
        df = pd.DataFrame(list(x), columns=['url'])
        one_df = one_df.append(df, ignore_index=True)
    one_df = one_df[one_df.url.str.len()>0] 
    print(one_df)
    one_df.to_csv(outfile)

结果:

                           url
0   'https://www.ex.com/prod1'
1   'https://www.ex.com/prod2'
2   'https://www.ex.com/prod3'
3   'https://www.ex.com/prod2'
4   'https://www.ex.com/prod3'
5   'https://www.ex.com/prod25
6  'https://www.ex.com/prod43'
7   'http://www.ex.com/prod99'

或者,

一个更清洁的解决方案可能是:

with open('product_Url.txt') as data_file:    
    data = json.load(data_file)

all_data = [element.replace('[','').replace(']',',').strip().split(',') for element in data]

one_df = pd.DataFrame({'url':all_data[0]})
one_df = one_df[one_df.url.str.len()>0] 
one_df.to_csv(outfile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2022-01-26
    • 2021-08-08
    • 1970-01-01
    • 2016-08-15
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多