Python Pandas无法覆盖csv文件“ OSError:[Errno 22]无效参数”

时间:2018-09-23 08:16:41

标签: python pandas csv

我找到了许多有关Errno 22的答案,但没有特定于熊猫的内容,也没有关于仅在覆盖时不写入的情况(初始写入成功)。

因此,我成功使用以下python脚本重新创建了该错误:

<body>
    <header>
        <ul class="nav">   
            <li><a href="homepage.html">Home</a></li>
            <li><a href="#">About</a></li>
            <li><a href="#">Contact</a></li>
            <li><a href="#">Services</a></li>
            <li id="log"><a href="index.html">Login</a></li>           
       </ul>        
     </header> 
</body>

因此,对to_csv的首次调用将写入以下文件

import pandas as pd

print('path:')
path = input()

data = pd.DataFrame(data=[1,2,3], columns=['index'])
data.to_csv(path, encoding='utf-8', index=False)

data = data.append(pd.DataFrame(data=[4,5,6], columns=['index']))
data.to_csv(path, encoding='utf-8', index=False)

但是第二次调用to_csv会导致错误:

index
1
2
3

非常感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

您可以使用here中记录的DataFrame.update功能。它允许覆盖数据:

data = pd.DataFrame(data=[1,2,3], columns=['index'])
data.to_csv(path, encoding='utf-8', index=False)

newData = pd.DataFrame(data=[4,5,6], columns=['index'])
data.update(newData, join='left', overwrite=True, filter_func=None, raise_conflict=False)
data.to_csv(path, encoding='utf-8', index=False)

答案 1 :(得分:0)

我发现的解决方案是使用os.remove(path):

import pandas as pd
import os

print('path:')
path = input()

data = pd.DataFrame(data=[1,2,3], columns=['index'])
data.to_csv(path, encoding='utf-8', index=False)

if(os.path.exists(path)):
    os.remove(path)

data = data.append(pd.DataFrame(data=[4,5,6], columns=['index']))
data.to_csv(path, encoding='utf-8', index=False)

可惜to_csv没有覆盖模式