0

Python は初めてで、プログラミングは一般的で、次のことを試みています。

1) フォルダーから複数の (同じ形式の) CSV ファイルを読み取る

2) 各 CSV ファイルから X 列の「時間」と Y 列の「pH」を 1 つのプロットにプロットします。

3) プロットの各行の参照としてファイル名 (.csv なし) を使用して凡例を作成します。

単一の CSV ファイルを開いて、X と Y をプロットすることはできましたが、ファイルを反復処理して単一のプロットに複数の行を重ねることはできませんでした。

どんな助けでも大歓迎です!ファイルを読み込むいくつかの異なる方法を試しましたが、そのうちの 1 つを以下に示しています。後で操作できるように、ファイルを個々の pandas データテーブルとして読み込みたいと思います。今のところ、いくつかの基本的なコードが機能することを望んでいます。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms

for ferm in ferms:
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.plot(ferms['EFT(h)'], ferms['pH1.PV [pH]'], 'k--')
    plt.xlabel('EFT(h)')
    plt.ylabel('pH')
    plt.show()

@Paul H の提案に基づいて修正されたコード


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)

for ferm in ferms:
# define the dataframe
    data = pd.read_csv(ferm)    
    ax.plot(ferms[0], ferms[3], 'k--')

plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()

新しいエラー:

--> 235 return array(a, dtype, copy=False, order=order) 236 237 def asanyarray(a, dtype=None, order=None):

ValueError: 文字列を float に変換できませんでした: Python/CSV\20135140.csv


確認するために、csv ファイルにアクセスしてヘッダーを削除しました。ヘッダーが「string to float」エラーの原因である可能性があると考えました。ただし、csvs に数字しかない場合でも、同じエラーがスローされました。

4

2 に答える 2

0

ループごとに新しい図を作成しているため、機能していないようです。

これを試して:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)

for ferm in ferms:
    # define the dataframe
    data = pd.read_csv(ferm)
    ax.plot(data['EFT(h)'], data['pH1.PV [pH]'], 'k--')

plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()
于 2013-06-20T17:52:43.453 に答える