Как открыть CSV файлы из папки и применить к ним for?
Задача - открыть все CSV файлы в папке и применить к ним for.
Код внизу не работает. На выходе должен получиться большой список print из всех CSV лежащих в папке data.
import pandas as pd
from pathlib import Path
def fun(filename):
df = [fun(f) for f in Path("/data/").glob("*.csv")]
df.columns = ['Date', 'Time', 'Close']
close_l = list(df['Close'].values)
for i in range(df):
close = close_l[i]
if close > 26:
print(close *10)
Результат:
Date, Time, Close
файл 1
2020.06.01 190016 22
2020.06.01 190017 30
2020.06.01 190018 30
файл 2
2020.06.01 190016 28
2020.06.01 190017 28
2020.06.01 190018 24
файл 3
2020.06.01 190016 29
2020.06.01 190017 22
2020.06.01 190018 29
Результат вывода:
300
300
...
280
280
...
290
290
это 3 файла, где в столбце df['Close'] были значения больше 26. На выходе после умножения на 10 каждой строки вышел такой пример.
Пример файла.
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
def fun(
filename,
names=["Date", "Time", "Close"],
col="Close",
threshold=26,
mult_factor=10,
**args):
res = (pd.read_csv(filename, header=None, names=names, **args)
.query(f"{col} > @threshold")
[col] * mult_factor)
return res
res = pd.concat([fun(f, threshold=26, mult_factor=10, delim_whitespace=True)
for f in Path(r"C:\temp\data").glob("*.csv")],
ignore_index=True)
результат:
In [263]: res
Out[263]:
0 300
1 300
2 280
3 280
4 290
5 290
Name: Close, dtype: int64
In [264]: res.to_list()
Out[264]: [300, 300, 280, 280, 290, 290]
In [265]: res.to_list()
Out[265]: [300, 300, 280, 280, 290, 290]
Автор решения: MaxU
→ Ссылка
Пример медленной (невекторизированной) функции, которая будет итерироваться по строкам каждого CSV файла и печатать на экран:
def fun(filename, **kwargs):
df = pd.read_csv(
filename, header=None, names=["Date", "Time", "Close"], **kwargs)
for idx, row in df.iterrows():
if row["Close"] > 26:
print(row["Close"] *10)
_ = [fun(f, delim_whitespace=True) for f in Path(r"C:\temp\data").glob("*.csv")]
вывод:
300
300
280
280
290
290