Browse Source

Datetime, Pandas big changes to Series

pull/192/head
Jure Šorn 3 months ago
parent
commit
1bb76d1285
2 changed files with 22 additions and 22 deletions
  1. 20
      README.md
  2. 24
      index.html

20
README.md

@ -662,12 +662,12 @@ import zoneinfo, dateutil.tz
### Arithmetics
```python
<bool> = <D/T/DTn> > <D/T/DTn> # Ignores time jumps (fold attribute). Also ==.
<bool> = <DTa> > <DTa> # Ignores jumps if they share tz object. Broken ==.
<bool> = <DTa> > <DTa> # Ignores time jumps if they share tzinfo object.
<TD> = <D/DTn> - <D/DTn> # Ignores jumps. Convert to UTC for actual delta.
<TD> = <DTa> - <DTa> # Ignores jumps if they share tzinfo object.
<D/DT> = <D/DT> ± <TD> # Returned datetime can fall into missing hour.
<TD> = <TD> * <float> # Also: <TD> = abs(<TD>) and <TD> = <TD> ±% <TD>.
<float> = <TD> / <TD> # E.g. how many hours are in TD. Also //, divmod().
<TD> = <TD> * <float> # Also `<TD> = abs(<TD>)`, `<TD> = <TD> ± <TD>`.
<float> = <TD> / <TD> # Also `<int>, <TD> = divmod(<TD>, <TD>)`.
```
@ -3165,6 +3165,7 @@ Name: a, dtype: int64
```python
<S> = pd.Series(<list>) # Uses list's indices for 'index'.
<S> = pd.Series(<dict>) # Uses dictionary's keys for 'index'.
<S> = pd.concat(<coll_of_S>) # Also <S>.combine_first(<S>), <S>.update(<S>).
```
```python
@ -3176,18 +3177,17 @@ Name: a, dtype: int64
```python
<el> = <S>[key/i] # Or: <S>.<key>
<S> = <S>[coll_of_keys/coll_of_i] # Or: <S>[key/i : key/i]
<S> = <S>[bools] # Or: <S>.loc/iloc[bools]
<S> = <S>[<S_of_bools>] # Or: <S>.loc/iloc[<S_of_bools>]
```
```python
<S> = <S> > <el/S> # Returns S of bools. Pairs items by keys.
<S> = <S> > <el/S> # Returns S of bools. For logic use &, |, ~.
<S> = <S> + <el/S> # Items with non-matching keys get value NaN.
```
```python
<S> = pd.concat(<coll_of_S>) # Concats multiple series into one long Series.
<S> = <S>.combine_first(<S>) # Adds items that are not yet present.
<S>.update(<S>) # Updates items that are already present.
<S> = <S>.value_counts(normalize=False) # Returns S of unique values and their counts.
<S> = <S>.str.strip/lower/contains/replace() # Processes strings. For dates see File Formats.
```
```python
@ -3199,7 +3199,7 @@ Name: a, dtype: int64
#### Series — Aggregate, Transform, Map:
```python
<el> = <S>.sum/max/mean/idxmax/all() # Or: <S>.agg(lambda <S>: <el>)
<el> = <S>.sum/max/mean/idxmax/all/count() # Or: <S>.agg(lambda <S>: <el>)
<S> = <S>.rank/diff/cumsum/ffill/interpol…() # Or: <S>.agg/transform(lambda <S>: <S>)
<S> = <S>.isna/fillna/isin([<el/coll>]) # Or: <S>.agg/transform/map(lambda <el>: <el>)
```
@ -3314,7 +3314,7 @@ c 6 7
#### DataFrame — Aggregate, Transform, Map:
```python
<S> = <DF>.sum/max/mean/idxmax/all() # Or: <DF>.apply/agg(lambda <S>: <el>)
<S> = <DF>.sum/max/mean/idxmax/all/count() # Or: <DF>.apply/agg(lambda <S>: <el>)
<DF> = <DF>.rank/diff/cumsum/ffill/interpo…() # Or: <DF>.apply/agg/transform(lambda <S>: <S>)
<DF> = <DF>.isna/fillna/isin([<el/coll>]) # Or: <DF>.applymap(lambda <el>: <el>)
```

24
index.html

@ -55,7 +55,7 @@
<body>
<header>
<aside>December 31, 2024</aside>
<aside>January 11, 2025</aside>
<a href="https://gto76.github.io" rel="author">Jure Šorn</a>
</header>
@ -579,12 +579,12 @@ Point(x=<span class="hljs-number">1</span>, y=<span class="hljs-number">2</span>
<li><strong><code class="python hljs"><span class="hljs-string">'%Z'</span></code> accepts <code class="python hljs"><span class="hljs-string">'UTC/GMT'</span></code> and local timezone's code and returns timezone's name, <code class="python hljs"><span class="hljs-string">'UTC[±HH:MM]'</span></code> if timezone is nameless, or an empty string if datetime is naive.</strong></li>
</ul>
<div><h3 id="arithmetics">Arithmetics</h3><pre><code class="python language-python apache hljs">&lt;bool&gt; = &lt;D/T/DTn&gt; &gt; &lt;D/T/DTn&gt; <span class="hljs-comment"># Ignores time jumps (fold attribute). Also ==.</span>
&lt;bool&gt; = &lt;DTa&gt; &gt; &lt;DTa&gt; <span class="hljs-comment"># Ignores jumps if they share tz object. Broken ==.</span>
&lt;bool&gt; = &lt;DTa&gt; &gt; &lt;DTa&gt; <span class="hljs-comment"># Ignores time jumps if they share tzinfo object.</span>
&lt;TD&gt; = &lt;D/DTn&gt; - &lt;D/DTn&gt; <span class="hljs-comment"># Ignores jumps. Convert to UTC for actual delta.</span>
&lt;TD&gt; = &lt;DTa&gt; - &lt;DTa&gt; <span class="hljs-comment"># Ignores jumps if they share tzinfo object.</span>
&lt;D/DT&gt; = &lt;D/DT&gt; ± &lt;TD&gt; <span class="hljs-comment"># Returned datetime can fall into missing hour.</span>
&lt;TD&gt; = &lt;TD&gt; * &lt;float&gt; <span class="hljs-comment"># Also: &lt;TD&gt; = abs(&lt;TD&gt;) and &lt;TD&gt; = &lt;TD&gt; ±% &lt;TD&gt;.</span>
&lt;float&gt; = &lt;TD&gt; / &lt;TD&gt; <span class="hljs-comment"># E.g. how many hours are in TD. Also //, divmod().</span>
&lt;TD&gt; = &lt;TD&gt; * &lt;float&gt; <span class="hljs-comment"># Also `&lt;TD&gt; = abs(&lt;TD&gt;)`, `&lt;TD&gt; = &lt;TD&gt; ± &lt;TD&gt;`.</span>
&lt;float&gt; = &lt;TD&gt; / &lt;TD&gt; <span class="hljs-comment"># Also `&lt;int&gt;, &lt;TD&gt; = divmod(&lt;TD&gt;, &lt;TD&gt;)`.</span>
</code></pre></div>
<div><h2 id="arguments"><a href="#arguments" name="arguments">#</a>Arguments</h2><div><h3 id="insidefunctioncall">Inside Function Call</h3><pre><code class="python language-python hljs">func(&lt;positional_args&gt;) <span class="hljs-comment"># func(0, 0)</span>
@ -2582,6 +2582,7 @@ Name: a, dtype: int64
<pre><code class="python language-python hljs">&lt;S&gt; = pd.Series(&lt;list&gt;) <span class="hljs-comment"># Uses list's indices for 'index'.</span>
&lt;S&gt; = pd.Series(&lt;dict&gt;) <span class="hljs-comment"># Uses dictionary's keys for 'index'.</span>
&lt;S&gt; = pd.concat(&lt;coll_of_S&gt;) <span class="hljs-comment"># Also &lt;S&gt;.combine_first(&lt;S&gt;), &lt;S&gt;.update(&lt;S&gt;).</span>
</code></pre>
<pre><code class="python language-python hljs">&lt;el&gt; = &lt;S&gt;.loc[key] <span class="hljs-comment"># Or: &lt;S&gt;.iloc[i]</span>
&lt;S&gt; = &lt;S&gt;.loc[coll_of_keys] <span class="hljs-comment"># Or: &lt;S&gt;.iloc[coll_of_i]</span>
@ -2589,14 +2590,13 @@ Name: a, dtype: int64
</code></pre>
<pre><code class="python language-python hljs">&lt;el&gt; = &lt;S&gt;[key/i] <span class="hljs-comment"># Or: &lt;S&gt;.&lt;key&gt;</span>
&lt;S&gt; = &lt;S&gt;[coll_of_keys/coll_of_i] <span class="hljs-comment"># Or: &lt;S&gt;[key/i : key/i]</span>
&lt;S&gt; = &lt;S&gt;[bools] <span class="hljs-comment"># Or: &lt;S&gt;.loc/iloc[bools]</span>
&lt;S&gt; = &lt;S&gt;[&lt;S_of_bools&gt;] <span class="hljs-comment"># Or: &lt;S&gt;.loc/iloc[&lt;S_of_bools&gt;]</span>
</code></pre>
<pre><code class="python language-python hljs">&lt;S&gt; = &lt;S&gt; &gt; &lt;el/S&gt; <span class="hljs-comment"># Returns S of bools. Pairs items by keys.</span>
<pre><code class="python language-python hljs">&lt;S&gt; = &lt;S&gt; &gt; &lt;el/S&gt; <span class="hljs-comment"># Returns S of bools. For logic use &amp;, |, ~.</span>
&lt;S&gt; = &lt;S&gt; + &lt;el/S&gt; <span class="hljs-comment"># Items with non-matching keys get value NaN.</span>
</code></pre>
<pre><code class="python language-python hljs">&lt;S&gt; = pd.concat(&lt;coll_of_S&gt;) <span class="hljs-comment"># Concats multiple series into one long Series.</span>
&lt;S&gt; = &lt;S&gt;.combine_first(&lt;S&gt;) <span class="hljs-comment"># Adds items that are not yet present.</span>
&lt;S&gt;.update(&lt;S&gt;) <span class="hljs-comment"># Updates items that are already present.</span>
<pre><code class="python language-python hljs">&lt;S&gt; = &lt;S&gt;.value_counts(normalize=<span class="hljs-keyword">False</span>) <span class="hljs-comment"># Returns S of unique values and their counts.</span>
&lt;S&gt; = &lt;S&gt;.str.strip/lower/contains/replace() <span class="hljs-comment"># Processes strings. For dates see File Formats.</span>
</code></pre>
<pre><code class="python language-python hljs">&lt;S&gt;.plot.line/area/bar/pie/hist() <span class="hljs-comment"># Generates a plot. `plt.show()` displays it.</span>
</code></pre>
@ -2605,7 +2605,7 @@ Name: a, dtype: int64
<li><strong>Pandas uses NumPy types like <code class="python hljs"><span class="hljs-string">'np.int64'</span></code>. Series is converted to <code class="python hljs"><span class="hljs-string">'float64'</span></code> if we assign np.nan to any item. Use <code class="python hljs"><span class="hljs-string">'&lt;S&gt;.astype(&lt;str/type&gt;)'</span></code> to get converted Series.</strong></li>
<li><strong>Series will silently overflow if we run <code class="python hljs"><span class="hljs-string">'pd.Series([100], dtype="int8") + 100'</span></code>!</strong></li>
</ul>
<div><h4 id="seriesaggregatetransformmap">Series — Aggregate, Transform, Map:</h4><pre><code class="python language-python hljs">&lt;el&gt; = &lt;S&gt;.sum/max/mean/idxmax/all() <span class="hljs-comment"># Or: &lt;S&gt;.agg(lambda &lt;S&gt;: &lt;el&gt;)</span>
<div><h4 id="seriesaggregatetransformmap">Series — Aggregate, Transform, Map:</h4><pre><code class="python language-python hljs">&lt;el&gt; = &lt;S&gt;.sum/max/mean/idxmax/all/count() <span class="hljs-comment"># Or: &lt;S&gt;.agg(lambda &lt;S&gt;: &lt;el&gt;)</span>
&lt;S&gt; = &lt;S&gt;.rank/diff/cumsum/ffill/interpol…() <span class="hljs-comment"># Or: &lt;S&gt;.agg/transform(lambda &lt;S&gt;: &lt;S&gt;)</span>
&lt;S&gt; = &lt;S&gt;.isna/fillna/isin([&lt;el/coll&gt;]) <span class="hljs-comment"># Or: &lt;S&gt;.agg/transform/map(lambda &lt;el&gt;: &lt;el&gt;)</span>
</code></pre></div>
@ -2696,7 +2696,7 @@ c <span class="hljs-number">6</span> <span class="hljs-number">7</span>
┃ │ c . . <span class="hljs-number">6</span> <span class="hljs-number">7</span> │ │ │ treated as a column. ┃
┗━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
</code></pre>
<div><h4 id="dataframeaggregatetransformmap">DataFrame — Aggregate, Transform, Map:</h4><pre><code class="python language-python hljs">&lt;S&gt; = &lt;DF&gt;.sum/max/mean/idxmax/all() <span class="hljs-comment"># Or: &lt;DF&gt;.apply/agg(lambda &lt;S&gt;: &lt;el&gt;)</span>
<div><h4 id="dataframeaggregatetransformmap">DataFrame — Aggregate, Transform, Map:</h4><pre><code class="python language-python hljs">&lt;S&gt; = &lt;DF&gt;.sum/max/mean/idxmax/all/count() <span class="hljs-comment"># Or: &lt;DF&gt;.apply/agg(lambda &lt;S&gt;: &lt;el&gt;)</span>
&lt;DF&gt; = &lt;DF&gt;.rank/diff/cumsum/ffill/interpo…() <span class="hljs-comment"># Or: &lt;DF&gt;.apply/agg/transform(lambda &lt;S&gt;: &lt;S&gt;)</span>
&lt;DF&gt; = &lt;DF&gt;.isna/fillna/isin([&lt;el/coll&gt;]) <span class="hljs-comment"># Or: &lt;DF&gt;.applymap(lambda &lt;el&gt;: &lt;el&gt;)</span>
</code></pre></div>
@ -2932,7 +2932,7 @@ $ deactivate <span class="hljs-comment"># Deactivates the active
<footer>
<aside>December 31, 2024</aside>
<aside>January 11, 2025</aside>
<a href="https://gto76.github.io" rel="author">Jure Šorn</a>
</footer>

Loading…
Cancel
Save