【问题标题】:Problem in storing dataframe to csv format将数据帧存储为 csv 格式的问题
【发布时间】:2020-07-15 12:54:47
【问题描述】:

我目前正在使用下面的代码来网络抓取数据,然后将其存储在 CSV 文件中。

from bs4 import BeautifulSoup 
import requests

url='https://www.business-standard.com/rss/companies-101.rss'
soup = BeautifulSoup(requests.get(url).content, 'xml')

news_items = []

for item in soup.findAll('item'):
    news_item = {}
    news_item['title'] = item.title.text
    news_item['excerpt'] = item.description.text

    print(item.link.text)
    s = BeautifulSoup(requests.get(item.link.text).content, 'html.parser')

    news_item['text'] = s.select_one('.p-content').get_text(strip=True, separator=' ')
    news_item['link'] = item.link.text
    news_item['pubDate'] = item.pubDate.text
    news_item['Category'] = 'Company'
    news_items.append(news_item)

import pandas as pd
df = pd.DataFrame(news_items)
df.to_csv('company_data.csv',index = False)

显示数据框时,结果看起来很好。enter image description here 但是在打开 csv 文件时,列并不像预期的那样。 enter image description here谁能告诉我原因。

【问题讨论】:

  • 这是 Excel 的问题。尝试通过数据/新查询/来自文件/来自 CSV。
  • @divingTobi 谢谢。它现在正在工作。有什么方法可以直接打开吗?
  • 不,不知道有什么办法。但是为什么不将文件保存为 xlsx 开始呢? df.to_excel('file.xlsx').
  • 是的,会这样做。谢谢!

标签: python pandas csv export-to-csv


【解决方案1】:

问题是您的数据包含逗号,而 to_csv 的默认分隔符是“,”,因此数据集中的每个逗号都被视为单独的列。

如果您执行df.to_excel('company_data.xlsx', index=False),则不会出现此问题,因为它不是逗号分隔的。

【讨论】:

  • 不!默认情况下,MS Excel 的 CSV 分隔符取决于区域设置,在某些西欧区域设置中是分号 ;
【解决方案2】:

csv 文件不是尽管 Microsoft 声称是 Excel 文件,但它是包含记录和字段的文本文件。记录用\r\n 序列分隔,字段用分隔符分隔,通常是逗号。字段可以包含换行符或分隔符,前提是它们用引号引起来。

但众所周知,Excel 的 csv 处理模块很差。更准确地说,它可以读取它所写的内容,或者它所写的格式。为了对语言环境友好,MS 人员决定他们将使用语言环境小数分隔符(在某些西欧语言环境中是逗号 ,)并将使用另一个分隔符(当逗号是小数分隔符时,使用分号 ;)。因此,使用 Excel 读取其他工具生成的 CSV 文件是一场噩梦,可能有一些解决方法,例如在写入 CSV 文件时更改分隔符,但没有干净的方法。 LibreOffice 在除了 CSV 处理的大多数功能上都远远落后于 MS Office。所以我的建议是避免对 CSV 文件使用 Excel,而是使用 LibreOffice Calc。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2021-03-20
    • 2020-08-21
    • 2021-12-07
    相关资源
    最近更新 更多