Keresés

Hirdetés

Új hozzászólás Aktív témák

  • justmemory

    senior tag

    válasz #82595328 #634 üzenetére

    Szia(sztok)!

    Autodidakta pythonozó vagyok, leginkább öncélú szórakozásképpen írok magamnak programokat, tehát közel sem biztos, hogy a válaszom megfelelő; javítson ki, aki okosabb ebben!

    Szerintem nem kell split; .strptime és .strftime átalakításokkal sok mindent el lehet érni attól függően, hogy mi a végcél.

    Kiírni majd az open("fájlnév", "rw")-el tudod például.

    [ Szerkesztve ]

    --- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

  • cousin333

    addikt

    válasz #82595328 #634 üzenetére

    Az első pár dologban nem tudok kellően segíteni, de legalább a programot nem is kell lefordítani... :)

    A leírtak alapján továbbra is a pandas modult favorizálnám, mivel nagyon sokrétűen használható. Hogy a példádnál maradjak:

    - képes beolvasni a csv és más strukturált fájlokat

    - beolvasásnál meg lehet mondani, hogy melyik oszlop(ok) tartalmaznak dátumot (pl. akár akkor is, ha az év, hónap, nap és idő 4 külön oszlopban szerepel)

    - a dátum értelmezéséhez megadható saját függvény, de az ésszerűség határain belül képes értelmezni őket. Például az alábbi tesztfájlt gond nélkül beolvassa:

    Szam,Datum,Szoveg,Pont
    11,2016-01-01,Valami,12
    21,2016-03-05,Masik, 23
    31,2016-1-5,Harmadik,34
    41,2016-feb-8,Negyedik,48
    51,2016.08.12,Otodik,56

    Ehhez csak az alábbi kódot használtam:

    import pandas as pd
    data = pd.read_table('D:\\pandas_test.txt', sep=',', parse_dates=[1])

    Az eredmény pedig egy Pandas.DataFrame objektum lesz:

    >>> data.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5 entries, 0 to 4
    Data columns (total 4 columns):
    Szam 5 non-null int64
    Datum 5 non-null datetime64[ns]
    Szoveg 5 non-null object
    Pont 5 non-null int64
    dtypes: datetime64[ns](1), int64(2), object(1)
    memory usage: 240.0+ bytes

    Látható, hogy a Datum oszlop típusa datetime64. A beolvasott táblázat valahogy így néz ki (A legelső oszlop az index, amit jelen esetben ő maga generált):

    >>> print(data)
    Szam Datum Szoveg Pont
    0 11 2016-01-01 Valami 12
    1 21 2016-03-05 Masik 23
    2 31 2016-01-05 Harmadik 34
    3 41 2016-02-08 Negyedik 48
    4 51 2016-08-12 Otodik 56

    A dt.date függvényednek szükséges formátumot is könnyen előállíthatod:

    >>> x = data['Datum']
    >>> x.dt.date.values
    array([datetime.date(2016, 1, 1), datetime.date(2016, 3, 5),
    datetime.date(2016, 1, 5), datetime.date(2016, 2, 8),
    datetime.date(2016, 8, 12)], dtype=object)

    Ezt már megetetheted a függvényeddel. De igazából nem is biztos, hogy kell, hiszen az oszlop már dátum formátumú.

    [ Szerkesztve ]

    "We spared no expense"

  • #82595328

    törölt tag

    válasz #82595328 #634 üzenetére

    Köszönöm az eddigi segítséget. Eljutottam a fájlba írásig. Itt viszont olyan gondom van, hogy adott egy lista:
    [[['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651], ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159], ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]]

    Ezt fájlba írtam az alábbi paranccsal:

    with codecs.open('kesz.csv','w',encoding='utf-8') as f:
    for i in range(len(lista)):
    f.write((str(lista)+'\n'))

    Ez majdnem jó is lenne, csak ezt kapom:

    ['Kis', '2015/1', '2015-01-02', '2016-01-10', 1000, 37, 1651]
    ['Nagy', '2015/2', '2016-02-02', '2016-02-06', 50000, 44, 2159]
    ['Törpe', '2015/3', '2016-03-03', '2016-04-08', 500000, 346, 197]

    Viszont ezt szeretném. Az se baj, ha ',' helyett tab van.

    Kis, 2015/1, 2015-01-02, 2016-01-10, 1000, 37, 1651
    Nagy, 2015/2, 2016-02-02, 2016-02-06, 50000, 44, 2159
    Törpe, 2015/3, 2016-03-03, 2016-04-08, 500000, 346, 197

Új hozzászólás Aktív témák