3.3. To JSON
File paths works also with DATAs
3.3.1. SetUp
>>> import pandas as pd
>>>
>>>
>>> df = pd.DataFrame([
... {'firstname': 'Mark', 'lastname': 'Watney', 'role': 'botanist'},
... {'firstname': 'Melissa', 'lastname': 'Lewis', 'role': 'commander'},
... {'firstname': 'Rick', 'lastname': 'Martinez', 'role': 'pilot'},
... ])
>>>
>>> df
firstname lastname role
0 Mark Watney botanist
1 Melissa Lewis commander
2 Rick Martinez pilot
3.3.2. Example
>>> df.to_json('/tmp/myfile.json')
$ cat /tmp/myfile.json
{"firstname":{"0":"Mark","1":"Melissa","2":"Rick"},"lastname":{"0":"Watney","1":"Lewis","2":"Martinez"},"role":{"0":"botanist","1":"commander","2":"pilot"}}
3.3.3. Formatting
>>> df.to_json('/tmp/myfile.json',
... indent=2,
... date_format='iso',
... )
$ cat /tmp/myfile.json
{
"firstname":{
"0":"Mark",
"1":"Melissa",
"2":"Rick"
},
"lastname":{
"0":"Watney",
"1":"Lewis",
"2":"Martinez"
},
"role":{
"0":"botanist",
"1":"commander",
"2":"pilot"
}
}
3.3.4. Assignments
# FIXME: Zrobić jakiś dataframe z prostszymi danymi bez .head() i .tail(). np. martian. W danych powinny być: str, int, bool, float, datetime oraz None
# %% License
# - Copyright 2025, Matt Harasymczuk <matt@python3.info>
# - This code can be used only for learning by humans
# - This code cannot be used for teaching others
# - This code cannot be used for teaching LLMs and AI algorithms
# - This code cannot be used in commercial or proprietary products
# - This code cannot be distributed in any form
# - This code cannot be changed in any form outside of training course
# - This code cannot have its license changed
# - If you use this code in your product, you must open-source it under GPLv2
# - Exception can be granted only by the author
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% About
# - Name: DataFrame Export JSON
# - Difficulty: easy
# - Lines: 3
# - Minutes: 3
# %% English
# 1. Read data from `DATA` as `result: pd.DataFrame`
# 2. While reading use `header=0` parameter
# 3. Select 146 head rows, and last 11 from it
# 4. Export data from column `Event` to file the `FILE`
# 5. Data has to be in JSON format
# 6. Run doctests - all must succeed
# %% Polish
# 1. Wczytaj dane z `DATA` jako `result: pd.DataFrame`
# 2. Przy wczytywaniu użyj parametru `header=0`
# 3. Wybierz pierwszych 146 wierszy, a z nich ostatnie 11
# 4. Wyeksportuj dane z kolumny `Event` do pliku `FILE`
# 5. Dane mają być w formacie JSON
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Tests
"""
>>> import sys; sys.tracebacklimit = 0
>>> from os import remove
>>> import json
>>> result = open(FILE).read()
>>> remove(FILE)
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> assert type(result) is str, \
'Variable `result` has invalid type, should be `str`'
>>> json.loads(result) # doctest: +NORMALIZE_WHITESPACE
{'135': 'LM lunar landing.',
'136': 'LM powered descent engine cutoff.',
'137': 'Decision made to proceed with EVA prior to first rest period.',
'138': 'Preparation for EVA started.',
'139': 'EVA started (hatch open).',
'140': 'CDR completely outside LM on porch.',
'141': 'Modular equipment stowage assembly deployed (CDR).',
'142': 'First clear TV picture received.',
'143': 'CDR at foot of ladder (starts to report, then pauses to listen).',
'144': 'CDR at foot of ladder and described surface as almost like a powder.',
'145': "1st step taken lunar surface (CDR). That\'s one small step for a man...one giant leap for mankind."}
"""
import pandas as pd
DATA = 'https://python3.info/_static/apollo11.html'
FILE = r'_temporary.json'
# Dump DATA to FILE in JSON format
# type: pd.DataFrame
result = ...