【问题标题】:How can I name columns in a CSV output by pandas?如何命名熊猫 CSV 输出中的列?
【发布时间】:2020-01-18 07:45:02
【问题描述】:

我在编写包含两列的 csv 文件时遇到了一些问题。第一列包含间隔或垃圾箱,而第二列包含这些垃圾箱中的事物计数。我从另一个包含原始数据点的 csv 文件制作了这个 csv 文件。我可以编写文件,但无法命名列。我希望输出文件应该是一个包含两列的 csv,所以我向 .to_csv 函数提供了一个包含两个名称的列表,它出现了这个错误

    Traceback (most recent call last):
  File "C:/Users/willi/Documents/Python/csv_processing_scratch/simple_csv_processor.py", line 65, in <module>
    create_binned_csv_counts(dir_stringx, data_bin_edges, "value_counts_x_frameintervalsize_" + str(frame_interval_size))
  File "C:/Users/willi/Documents/Python/csv_processing_scratch/simple_csv_processor.py", line 36, in create_binned_csv_counts
    pd.cut(data_array, bin_edges).value_counts().to_csv(vcfilestring,index_label=True, header=["Coordinate Bins", "Counts for time interval " + str(i)])
  File "C:\Users\willi\AppData\Roaming\Python\Python38\site-packages\pandas\core\series.py", line 4685, in to_csv
    return self.to_frame().to_csv(**kwargs)
  File "C:\Users\willi\AppData\Roaming\Python\Python38\site-packages\pandas\core\generic.py", line 3228, in to_csv
    formatter.save()
  File "C:\Users\willi\AppData\Roaming\Python\Python38\site-packages\pandas\io\formats\csvs.py", line 202, in save
    self._save()
  File "C:\Users\willi\AppData\Roaming\Python\Python38\site-packages\pandas\io\formats\csvs.py", line 310, in _save
    self._save_header()
  File "C:\Users\willi\AppData\Roaming\Python\Python38\site-packages\pandas\io\formats\csvs.py", line 239, in _save_header
    raise ValueError(
ValueError: Writing 1 cols but got 2 aliases

它来自的代码块是这个

def create_binned_csv_counts(maindirectorystring, bin_edges, valuecountstring):
    i = 0
    for filename in os.listdir(maindirectorystring):
        vcfilestring = str(filename[0:18]) + "_value_counts.csv"
        os.chdir(maindirectorystring)
        os.chmod(filename, 0o7777)
        df = pd.read_csv(filename)
        data_array = df["Coordinates for bin " + str(i)].to_numpy()
        os.chdir(cwd)
        os.chdir(valuecountstring)
        pd.cut(data_array, bin_edges).value_counts().to_csv(vcfilestring,index_label=True, header=["Coordinate Bins", "Counts for time interval " + str(i)])
        os.chdir(cwd)
        i += 1

我认为这与 cut 和 value_counts 返回的数据类型有关,但在文档中搜索这些 pandas 方法并不是很有启发性。

如果我能提供更多信息,请告诉我,我很感激我能得到的任何帮助。

同样相关的是,当我不命名列时,输出 csv 的前几行,我也不确定为什么会出现零。

0
"(-10, -9]",0
"(-9, -8]",0
"(-8, -7]",0
"(-7, -6]",0
"(-6, -5]",0
"(-5, -4]",0
"(-4, -3]",0
"(-3, -2]",21
"(-2, -1]",13
"(-1, 0]",33
"(0, 1]",74
"(1, 2]",285

我希望它看起来像这样

"Coordinate bins", "Count"
"(-10, -9]",0
"(-9, -8]",0
"(-8, -7]",0
"(-7, -6]",0
"(-6, -5]",0
"(-5, -4]",0
"(-4, -3]",0
"(-3, -2]",21
"(-2, -1]",13
"(-1, 0]",33
"(0, 1]",74
"(1, 2]",285

【问题讨论】:

  • to_csv 内设置index=False
  • 啊,好吧,这并没有完全做到这一点,但它确实让我意识到我在 index 和 index_label 及其用法之间的混淆。谢谢,有帮助。

标签: python pandas csv


【解决方案1】:

好的,YOLO 帮我开始思考正确的方向,我把 to_csv 文件的那一行改成了这个

pd.cut(data_array,bin_edges).value_counts().to_csv(vcfilestring,index_label="Coordinate Bins",index=True, header=["Counts for time interval " + str(i)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2021-08-15
    • 2020-07-30
    • 2022-06-28
    • 1970-01-01
    • 2017-03-20
    • 2017-04-27
    相关资源
    最近更新 更多