Browsed by
Autor: hanshof

image_pdfimage_print
Netzwerk-Kabel selbst gebaut (CAT-5 Patchkabel, Ethernet)

Netzwerk-Kabel selbst gebaut (CAT-5 Patchkabel, Ethernet)

 

 

 

 

Netzwerk-Kabel selbst gebaut (CAT-5 Patchkabel, Ethernet)

Normalerweise kauft man Netzwerkkabel fertig konfektioniert. Eine Eigenanfertigung kann aber in manchen Situationen sehr sinnvoll sein, z.B.

  • wenn der Kabelkanal schon so voll ist, dass kein Kabel mit Stecker mehr durchpasst.
  • wenn das Kabel durch ein enges Bohrloch in einer Wand verlegt werden muss.
  • wenn die Kabellängen genau angepasst werden sollen.

Die Herstellung ist gar nicht so schwierig und kostspielig, wie oft behauptet wird. Hier ist eine Schritt-für-Schritt-Anleitung, wie Sie zuverlässig und sehr preiswert Ihre eigenen Kabel konfektionieren können. Unsere Versuche haben gezeigt, dass eine Crimpzange in einfacher Ausführung genügt.

Benötigt werden:

  • Netzwerkkabel FTP (Foiled Twisted Pair) Kat.5, Preis ab ca. EUR 0,50 pro Meter
  • RJ45-Stecker, geschirmt (mit Führungshilfe und Knickschutz), wie auf dem ersten Bild, Preis ab ca. EUR 1,20 pro Stück
  • Crimpzange RJ45 (Einfachausführung), Preis ab ca. EUR 15,00
  • Messer zum Abisolieren, Pinzette, Spitzzange, kleiner Schraubenzieher
Als erstes: Knickschutzhülle aufs Kabel schieben (vergisst man leicht!!!)
Dann die Außenhülle des Kabels auf ca. 2 cm entfernen, Draht (falls vorhanden) nach hinten biegen.
Adern entflechten und anordnen: weiß/orange – orange – weiß/grün – blau – weiß/blau – grün – weiß/braun – braun.
Es gibt auch eine andere Farbvariante; wichtig ist nur, dass beide Kabelstecker gleich belegt sind.
Adern in die Einführungshilfe schieben (eventuell mit Pinzette) und gerade schneiden.
Stecker mit Sichtfenster nach oben halten und die Adern mitsamt Führungshilfe bis ganz nach vorn unter die Kontakte einschieben (weiß/orange ist links, braun rechts).
Stecker in die Crimpzange so weit einschieben, so dass die goldenen Kontakte genau unter dem Kamm der Zange liegen. Dann die Zange bis zum Anschlag zudrücken.
Die Kontakte sind jetzt hereingedrückt und mit den Adern verbunden. Draht des Kabels mit Steckerabschirmung verbinden.
Mit Spitzzange Kabelzugsicherung umbiegen. Mit Schraubenzieher die beiden seitlichen inneren Fahnen nach innen umbiegen.
Nur die äußeren Fahnen bleiben als Führung für die Knickschutzhülle stehen.
Hülle aufschieben. Fertig.

Hinweise:

Die Anleitung gilt in den Details natürlich nur für den gezeigten Steckertyp.

Das gezeigte Kabel ist ein „Patch-Kabel“. Alle Adern sind 1:1 durchgeschleift. Es dient z.B. zum Anschluss eines PCs an eine Netzwerksteckdose oder an einen Hub.
Zum Verbinden zweier PCs miteinander wird ein „Crossover-Kabel“ benötigt, bei dem bestimmte Leitungen vertauscht sind.

Ausführliche Informationen, auch mit Schaltbildern typischer Verkabelungen gibt es unter http://www.netzmafia.de/skripten/netze/

Die gezeigten Teile sind bei http://www.nwkomp.de erhältlich.

Copyright©  Internet Service Kämper.

 

 

 

 

Setting up an NFS Server and Client on Debian 9 (Stretch) (export Folder)

Setting up an NFS Server and Client on Debian 9 (Stretch) (export Folder)

This guide explains how to set up an NFS server and an NFS client on Debian 9. NFS stands for Network File System; through NFS, a client can access (read, write) a remote share on an NFS server as if it was on the local hard disk. In this Tutorial, I will show you two different NFS exports, the export of a client directory that stores files as user nobody/nogroup without preserving filesystem permissions and a export of the /var/www directory which preserves permissions and ownership of files, as required on a hosting server setup.
1 Preliminary Note

I’m using two Debian Wheezy systems here:

NFS Server: server.example.com, IP address: 192.168.1.100
NFS Client: client.example.com, IP address: 192.168.1.101

2 Installing NFS

Ensure that the server is up to date by updating the package lists and install pending updates on both servers

apt-get update

apt-get upgrade

Then continue with the NFS server and client installation.

server:

On the NFS server we run:

apt-get install nfs-kernel-server nfs-common

Then we create the system startup links for the NFS server and start it:

client:

On the client we can install NFS as follows (this is actually the same as on the server):

apt-get install nfs-common

3 Exporting Directories on the Server

server:

I’d like to make the directories /home/client1 and /var/www accessible to the client to show the two different access modes of the NFS server. The directory /home/client1 is shared in standard mode, so all files written to this directory are stored as user nobody and group nogroup. For the directory /var/www I use the no_root_squash option which instructs the NFS server to preserve permissions and ownership of the files. This is e.g. required when you like to export the /var/www directory of a web server managed with ISPConfig 3

First, I’ll create the /home/client1 directory

mkdir /home/client1
chown nobody:nogroup /home/client1
chmod 755 /home/client1

The /var/www directory exists most likely on your server. If not, then create it:

mkdir /var/www
chown root:root /var/www
chmod 755 /var/www

Now we must modify /etc/exports where we „export“ our NFS shares. We specify /home/client1 and /var/www as NFS shares and tell NFS to make accesses to /home/client1 as user nobody (to learn more about /etc/exports, its format and available options, take a look at

man 5 exports

)

nano /etc/exports

/home/client1 192.168.1.101(rw,sync,no_subtree_check)
/var/www 192.168.1.101(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash)

(The no_root_squash option makes that /var/www will be accessed as root.)

To apply the changes in /etc/exports, we restart the kernel nfs server

service nfs-kernel-server restart

4 Mounting the NFS shares on the Client

client:

First, we create the directories where we want to mount the NFS shares, e.g.:

mkdir -p /mnt/nfs/home/client1
mkdir -p /var/www

If the directory /var/www exists already on your server, then stop apache, rename the directory and create a new empty directory as mount point

service apache2 stop
mv /var/www /var/www_bak
mkdir -p /var/www

Afterward, we can mount them as follows:

mount 192.168.1.100:/home/client1 /mnt/nfs/home/client1
mount 192.168.1.100:/var/www /var/www

You should now see the two NFS shares in the outputs of

df -h

root@server1:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
root@server1:/tmp#

and

mount

root@server1:/tmp# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
root@server1:/tmp#

5 Testing

On the client, you can now try to create test files on the NFS shares:

client:

touch /mnt/nfs/home/client1/test.txt
touch /var/www/test.txt

Now go to the server and check if you can see both test files:

server:

ls -l /home/client1/

root@server1:/tmp# ls -l /home/client1/
total 0
-rw-r–r– 1 nobody nogroup 0 Nov 16 10:52 test.txt
root@server1:/tmp#

ls -l /var/www

root@server1:/tmp# ls -l /var/www
total 0
-rw-r–r– 1 root root 0 Nov 16 10:52 test.txt
root@server1:/tmp#

(Please note the different ownerships of the test files: the /home/client1 NFS share gets accessed as nobody / nogroup and is owned by nobody / nogroup; the /var/www share gets accessed as root, therefore /var/www/test.txt is owned by user and group root.)
6 Mounting NFS Shares At Boot Time

Instead of mounting the NFS shares manually on the client, you could modify /etc/fstab so that the NFS shares get mounted automatically when the client boots.

client:

Open /etc/fstab and append the following lines:

nano /etc/fstab

[…]
192.168.1.100:/home/client1 /mnt/nfs/home/client1 nfs rw,sync,hard,intr 0 0
192.168.1.100:/var/www /var/www nfs rw,sync,hard,intr 0 0

Instead of rw,sync,hard,intr you can use different mount options. To learn more about available options, take a look at

man nfs

To test if your modified /etc/fstab is working, unmount the shares and run mount -a:

umount /mnt/nfs/home/client1
umount /var/www
mount -a

You should now see the two NFS shares in the outputs of

df -h

root@server1:/# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
root@server1:/#

and

mount

root@server1:/# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
root@server1:/#

7 Credits

Documentation with Sphinx

Documentation with Sphinx

First, you will need to install Sphinx:

1
pip install sphinx

example project structure

pyutils 
    
    doc 
    geo 
    misc 
    stat 
    weather


cd doc

$ sphinx-quickstart
Uncomment the following line from ‘…/docs/source/conf.py’ and make it point to the top-level directory in your project:
# If extensions (or modules to document with autodoc) are in another directory,
add these directories to sys.path here. If the directory is relative to the
documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(os.path.abspath('../..'))

In the ‘…/docs/’ folder, run:

sphinx-apidoc -f -o source/ ../
make html
Pandas – Datenaggregationen mit Multi-Indizes

Pandas – Datenaggregationen mit Multi-Indizes



3.6.5_Datenaggregationen mit Multi-Indizes








Datenaggregation mit Multi-Indizes

In [1]:
import pandas as pd
import numpy as np

health data

In [2]:
# Hierarchische Indizes aus Spalten
index = pd.MultiIndex.from_product([[2013,2014],[1,2]],
                    names = ['year','visit'])
In [3]:
columns = pd.MultiIndex.from_product([['Bob','Jim','Sue'],
                                    ['HR','temp']],
                                    names = ['subject','type'])
In [4]:
# daten simulieren
In [5]:
data = np.round(np.random.randn(4,6),1)
data[:,::2] *= 10
data += 37
In [6]:
## DataFrame erzeugen
In [7]:
health_data = pd.DataFrame(data,index=index,
                          columns=columns)
health_data
Out[7]:
subject Bob Jim Sue
type HR temp HR temp HR temp
year visit
2013 1 43.0 37.3 48.0 33.7 28.0 35.9
2 40.0 37.0 34.0 37.0 29.0 38.5
2014 1 40.0 35.6 37.0 38.1 51.0 36.5
2 41.0 39.8 44.0 36.1 38.0 35.7
In [8]:
# Mittelwert der messungen der beide Besuche pro jahr berechnen
data_mean = health_data.mean(level='year')
data_mean
Out[8]:
subject Bob Jim Sue
type HR temp HR temp HR temp
year
2013 41.5 37.15 41.0 35.35 28.5 37.2
2014 40.5 37.70 40.5 37.10 44.5 36.1
In [9]:
## durch zusätzliche verwendung von axis könne auch der Mittelwert der levels in Spalten berechnet werde
data_mean = health_data.mean(axis = 1,level = 'type')
data_mean
Out[9]:
type HR temp
year visit
2013 1 39.666667 35.633333
2 34.333333 37.500000
2014 1 42.666667 36.733333
2 41.000000 37.200000

Pandas – Multi-Indizes umordnen

Pandas – Multi-Indizes umordnen



3.6.4_Multi-Indizes umordnen








Multi-Indices umordnen

In [1]:
import pandas as pd
import numpy as np

Sortierte und unsortierte Indizes

In [2]:
# mehrfach indizierte Daten deren Index nicht lexikografisch sortiert sind
index = pd.MultiIndex.from_product([['a','c','b'],
                                   [1,2]])
data = pd.Series(np.random.rand(6),index = index)
data.index.names = ['char','int']
data
Out[2]:
char  int
a     1      0.111285
      2      0.199666
c     1      0.119703
      2      0.917564
b     1      0.742794
      2      0.013356
dtype: float64
In [3]:
# partiellen Slice für diesen Index nicht möglich
try:
    data['a':'b']
    
except KeyError as e:
    print(type(e))
    print(e)
<class 'pandas.errors.UnsortedIndexError'>
'Key length (1) was greater than MultiIndex lexsort depth (0)'
In [4]:
data = data.sort_index()
data
Out[4]:
char  int
a     1      0.111285
      2      0.199666
b     1      0.742794
      2      0.013356
c     1      0.119703
      2      0.917564
dtype: float64
In [5]:
# nach der Sortierung funktioniert das partielle Slicing
data['a':'b']
Out[5]:
char  int
a     1      0.111285
      2      0.199666
b     1      0.742794
      2      0.013356
dtype: float64

Indizes transponieren mit stack un unstack

In [6]:
data = {('California', 2000): 33871648,
       ('California',2010): 37253956,
       ('Texas',2000):20851820,
       ('Texas',2010):25145561,
       ('New York', 2000):18976457,
       ('New York', 2010) :19378102 }
pop = pd.Series(data)
pop.index.names = ['state','year']
pop = pop.sort_index()
pop
Out[6]:
state       year
California  2000    33871648
            2010    37253956
New York    2000    18976457
            2010    19378102
Texas       2000    20851820
            2010    25145561
dtype: int64
In [7]:
pop.unstack(level=0)
Out[7]:
state California New York Texas
year
2000 33871648 18976457 20851820
2010 37253956 19378102 25145561
In [8]:
pop.unstack(level=1)
Out[8]:
year 2000 2010
state
California 33871648 37253956
New York 18976457 19378102
Texas 20851820 25145561
In [9]:
pop[:,2010]
Out[9]:
state
California    37253956
New York      19378102
Texas         25145561
dtype: int64
In [10]:
pop.unstack().stack()
Out[10]:
state       year
California  2000    33871648
            2010    37253956
New York    2000    18976457
            2010    19378102
Texas       2000    20851820
            2010    25145561
dtype: int64
In [11]:
## wenn MultiIndex sortiert ist (df.sort_index()) steht auch partielles Slicing zur Verfügung
pop.loc['California':'New York']
Out[11]:
state       year
California  2000    33871648
            2010    37253956
New York    2000    18976457
            2010    19378102
dtype: int64

Index zuweisen und zurücksetzen

In [12]:
## index in spalten umwandeln
pop_flat = pop.reset_index(name = 'population')
pop_flat
Out[12]:
state year population
0 California 2000 33871648
1 California 2010 37253956
2 New York 2000 18976457
3 New York 2010 19378102
4 Texas 2000 20851820
5 Texas 2010 25145561
In [13]:
# spalten in index umwandeln
pop_flat.set_index(['state','year'])
Out[13]:
population
state year
California 2000 33871648
2010 37253956
New York 2000 18976457
2010 19378102
Texas 2000 20851820
2010 25145561

Pandas – Methoden zum Erzeugen eines MultiIndex

Pandas – Methoden zum Erzeugen eines MultiIndex



3.6.2_Methoden zum Erzeugen eines MultiIndex








Methoden zum Erzeugen eines MultiIndex

In [1]:
import pandas as pd
import numpy as np

1. Übergabe einer Liste, die zwei oder mehr Indexarrays enthält

In [2]:
np.random.rand(4,2)
Out[2]:
array([[0.85639296, 0.38804009],
       [0.15937238, 0.49771615],
       [0.60506705, 0.47761962],
       [0.49811394, 0.07419616]])
In [3]:
## die erzeugung des MultiIndex findet im Hintergrund statt
df = pd.DataFrame(np.random.rand(4,2),
                 index = [['a', 'a', 'b', 'b'],
                         [1, 2, 1, 2]],
                 columns = ['data1','data2'])
df
Out[3]:
data1 data2
a 1 0.807411 0.035202
2 0.377934 0.325956
b 1 0.233191 0.308035
2 0.569860 0.902117

Dictonary mit entsprechenden Tupels als Schlüssel

In [4]:
data = {('California', 2000): 33871648,
       ('California',2010): 37253956,
       ('Texas',2000):20851820,
       ('Texas',2010):25145561,
       ('New York', 2000):18976457,
       ('New York', 2010) :19378102 }
pd.Series(data)
Out[4]:
California  2000    33871648
            2010    37253956
Texas       2000    20851820
            2010    25145561
New York    2000    18976457
            2010    19378102
dtype: int64
In [5]:
pop = pd.Series(data)

Namen der MultiIndex-levels

In [6]:
pop.index.names = ['state','year']
pop
Out[6]:
state       year
California  2000    33871648
            2010    37253956
Texas       2000    20851820
            2010    25145561
New York    2000    18976457
            2010    19378102
dtype: int64
In [7]:
t =pd.MultiIndex.from_product([['a','b'],[1, 2]])
t
Out[7]:
MultiIndex(levels=[['a', 'b'], [1, 2]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

MultiIndex für Spalten

In [8]:
# Hierarchische Indizes aus Spalten
index = pd.MultiIndex.from_product([[2013,2014],[1,2]],
                    names = ['year','visit'])
In [9]:
columns = pd.MultiIndex.from_product([['Bob','Jim','Sue'],
                                    ['HR','temp']],
                                    names = ['subject','type'])
In [10]:
# daten simulieren
In [11]:
data = np.round(np.random.randn(4,6),1)
In [12]:
data
Out[12]:
array([[ 0.9, -0.4, -0.3, -1.1, -1.4, -1. ],
       [-1.5,  0. ,  0.1,  0.9, -0.4,  1.4],
       [-0.8, -0.7, -0.3,  1.5,  0.3, -0.8],
       [ 0.3, -0.7, -0.5,  2.1, -0.2,  1.4]])
In [13]:
data[:,::2]
Out[13]:
array([[ 0.9, -0.3, -1.4],
       [-1.5,  0.1, -0.4],
       [-0.8, -0.3,  0.3],
       [ 0.3, -0.5, -0.2]])
In [14]:
data[:,::2] *= 10
data
Out[14]:
array([[  9. ,  -0.4,  -3. ,  -1.1, -14. ,  -1. ],
       [-15. ,   0. ,   1. ,   0.9,  -4. ,   1.4],
       [ -8. ,  -0.7,  -3. ,   1.5,   3. ,  -0.8],
       [  3. ,  -0.7,  -5. ,   2.1,  -2. ,   1.4]])
In [15]:
data += 37
data
Out[15]:
array([[46. , 36.6, 34. , 35.9, 23. , 36. ],
       [22. , 37. , 38. , 37.9, 33. , 38.4],
       [29. , 36.3, 34. , 38.5, 40. , 36.2],
       [40. , 36.3, 32. , 39.1, 35. , 38.4]])
In [16]:
## DataFrame erzeugen
In [17]:
health_data = pd.DataFrame(data,index=index,
                          columns=columns)
health_data
Out[17]:
subject Bob Jim Sue
type HR temp HR temp HR temp
year visit
2013 1 46.0 36.6 34.0 35.9 23.0 36.0
2 22.0 37.0 38.0 37.9 33.0 38.4
2014 1 29.0 36.3 34.0 38.5 40.0 36.2
2 40.0 36.3 32.0 39.1 35.0 38.4
In [18]:
health_data['Sue','HR']
Out[18]:
year  visit
2013  1        23.0
      2        33.0
2014  1        40.0
      2        35.0
Name: (Sue, HR), dtype: float64
In [19]:
health_data['Sue']
Out[19]:
type HR temp
year visit
2013 1 23.0 36.0
2 33.0 38.4
2014 1 40.0 36.2
2 35.0 38.4
In [20]:
health_data.loc[:,('Sue','HR')]
Out[20]:
year  visit
2013  1        23.0
      2        33.0
2014  1        40.0
      2        35.0
Name: (Sue, HR), dtype: float64
In [21]:
health_data.loc[(2013,1),('Sue','HR')]
Out[21]:
23.0

Pandas – Indizierung und Slicing eines MultiIndex

Pandas – Indizierung und Slicing eines MultiIndex



3.6.3_Indizierung und Slicing eines MultiIndex