【问题标题】:DataFrame source csv is overwritten when manipulating df操作df时DataFrame源csv被覆盖
【发布时间】:2019-11-22 09:44:42
【问题描述】:

我正在玩DataFrames,我从*.csv 读取了一些数据

df = pd.DataFrame.from_csv(report_csv_path)
,duration,end,start
0,19800000,2019-03-28T17:00:00+02:00,2019-03-28T11:30:00+02:00
1,12600000,2019-03-28T10:00:00+02:00,2019-03-28T06:30:00+02:00
2,3600000,2019-03-27T21:00:00+02:00,2019-03-27T20:00:00+02:00

然后我做一些不起作用的事情,比如尝试解析和设置值等,下次我想做其他事情时,数据消失了,csv 只包含我刚刚尝试修改的单个列例如(这失败了,因为我还没有弄明白,但如果它不修改源就好了)

parse_timestamp = lambda x: datetime.strptime(x, "%Y-%m-%dT%H:%M:%S%z")

for (i, row) in df.iterrows():
    df.at[i, "start"] = parse_timestamp(row["start"])

df 是否仍然连接到该文件?如果是这样,我怎样才能断开这个连接,以免它破坏我的文件?

【问题讨论】:

    标签: python python-3.x pandas pycharm


    【解决方案1】:

    不是一个完整的答案,但评论太长了。

    不,read_csv 完成后会关闭文件处理程序,因此那里没有连接。

    其次,你不需要iterrows,它非常慢,转换日期时间,你可以这样做:

    df['start'] = pd.to_datetime(df['start'])
    

    并且 pandas 将检测(大多数)常见的日期时间格式。您甚至可以将该流程集成到read_csv

    df = pd.read_csv(report_csv_path, parse_dates=['start'])
    

    【讨论】:

    • 这个问题超级诡异。只要我在DataFrame 中操作任何cell,我就会在VSCode 中看到这个变化,我打开了那个文件o_O,唯一的区别是new csv 没有索引列了。
    • 这确实很奇怪。你还在 VSCode 中运行 python 脚本吗?
    • 不,我使用 PyCharm pro 并且无论是否连接调试器都会发生这种情况......也许这是 PyCharm 的问题......
    • 好的,这绝对是 PyCharm,因为当我从命令行运行脚本时,csv 保持不变
    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 2019-01-18
    • 2020-08-06
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多